L'affectation directe d'une variable ne modifie pas les expressions qui utilisaient la variable rétroactivement.
>>> from sympy import Symbol
>>> x = Symbol('x')
>>> y = Symbol('y')
>>> f = x + y
>>> x = 0
>>> f
x + y
Pour remplacer plusieurs valeurs:
>>> from sympy import Symbol
>>> x, y = Symbol('x y')
>>> f = x + y
>>> f.subs({x:10, y: 20})
>>> f
30
En fait, sympy est conçu pour ne pas remplacer les valeurs tant que vous ne voulez pas vraiment les remplacer par subs
(voir http://docs.sympy.org/latest/tutorial/basic_operations.html )
Essayer
f.subs({x:0})
f.subs(x, 0) # as alternative
au lieu de
x = 0
La commande x = Symbol('x')
stocke Symbol('x')
de Sympy dans la variable Python x
. L'expression Sympy f
que vous créez par la suite contient Symbol('x')
, pas la variable Python x
).
Lorsque vous réaffectez x = 0
, La variable Python x
est définie sur zéro et n'est plus liée à Symbol('x')
. Cela n'a aucun effet. sur l'expression Sympy, qui contient toujours Symbol('x')
.
Ceci est mieux expliqué dans cette page de la documentation Sympy: http://docs.sympy.org/latest/gotchas.html#variables
Ce que vous voulez faire, c'est f.subs(x,0)
, comme indiqué dans d'autres réponses.