J'ai une expression comme cellePourquoi mon code Sympy calcule-t-il incorrectement l'approximation de la série Taylor du premier ordre?
qui est entré en sympy comme celui-ci (pour l'amour d'un exemple reproductible dans cette question)
from sympy import *
expression = Add(Mul(Integer(-1), Float('0.9926375361451395', prec=2), Add(Mul(Float('0.33167082639756074', prec=2), Pow(Symbol('k1'), Float('-0.66666666666666674', prec=2)), Pow(Symbol('n1'), Float('0.66666666666666674', prec=2))), Mul(Float('0.97999999999999998', prec=2), exp(Mul(Integer(-1), Symbol('mu1'))))), Pow(Add(Mul(Float('0.97999999999999998', prec=2), Symbol('k1'), exp(Mul(Integer(-1), Symbol('mu1')))), Mul(Integer(-1), Symbol('k2')), Mul(Pow(Symbol('n1'), Float('0.66666666666666674', prec=2)), Pow(Mul(Symbol('k1'), exp(Mul(Integer(-1), Symbol('mu1')))), Float('0.33333333333333331', prec=2)))), Integer(-1))), Pow(Add(Mul(Float('0.97999999999999998', prec=2), Symbol('k0'), exp(Mul(Integer(-1), Symbol('mu0')))), Mul(Integer(-1), Symbol('k1')), Mul(Pow(Symbol('n0'), Float('0.66666666666666674', prec=2)), Pow(Mul(Symbol('k0'), exp(Mul(Integer(-1), Symbol('mu0')))), Float('0.33333333333333331', prec=2)))), Integer(-1)))
Eyeballing cette expression, le premier ordre Approximation de Taylor pour l'une quelconque des variables, p.ex. k1
, autour d'une valeur non nulle doit être différente de zéro, mais ce code
x = symbol("x")
expression.series(k1, x0 = x, n = 1)
juste retourne 0
. C'est un problème parce que j'essaie de (éventuellement) calculer une approximation de la série de Taylor multivariée, dans la même veine que this answer, et si l'une des expansions de la série est erronée, l'ensemble s'effondre. Est-ce que j'ai codé quelque chose de mal, ou est-ce que mon calcul de base est si mauvais et que cela revient à zéro? De la documentation on series
, je suis assez certain que je l'utilise correctement.
On dirait que ce bogue est corrigé dans la version git master de SymPy. Là, 'O (x) .subs (x, x-1) + 1' donne' 1 + O (x - 1, (x, 1)) ', et la série en question donne' O (k₁ - x; k₁ → x) '. – asmeurer