web-dev-qa-db-fra.com

Comment substituer plusieurs symboles dans une expression en sympy?

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
14
Wesley

Pour remplacer plusieurs valeurs:

>>> from sympy import Symbol
>>> x, y = Symbol('x y')
>>> f = x + y
>>> f.subs({x:10, y: 20})
>>> f
30
31
Wesley

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
2
MSeifert

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.

2
Adrien