How to substitute multiple symbols in an expression in sympy?
Solution 1
To substitute several values:
>>> from sympy import Symbol
>>> x, y = Symbol('x y')
>>> f = x + y
>>> f.subs({x:10, y: 20})
>>> f
30
Solution 2
The command x = Symbol('x')
stores Sympy's Symbol('x')
into Python's variable x
. The Sympy expression f
that you create afterwards does contain Symbol('x')
, not the Python variable x
.
When you reassign x = 0
, the Python variable x
is set to zero, and is no longer related to Symbol('x')
. This has no effect on the Sympy expression, which still contains Symbol('x')
.
This is best explained in this page of the Sympy documentation: http://docs.sympy.org/latest/gotchas.html#variables
What you want to do is f.subs(x,0)
, as said in other answers.
Solution 3
Actually sympy is designed not to substitute values until you really want to substitute them with subs
(see http://docs.sympy.org/latest/tutorial/basic_operations.html)
Try
f.subs({x:0})
f.subs(x, 0) # as alternative
instead of
x = 0
Wesley
Updated on October 04, 2020Comments
-
Wesley over 3 years
Assigning a variable directly does not modify expressions that used the variable retroactively.
>>> from sympy import Symbol >>> x = Symbol('x') >>> y = Symbol('y') >>> f = x + y >>> x = 0 >>> f x + y
-
Charlie Parker over 6 yearscheck out: docs.sympy.org/latest/tutorial/basic_operations.html for
expr.subs(x,val)
-
-
Wesley over 8 yearsWas looking for an answer to this earlier. I understand why my code didn't work but I just needed a quick reference for the syntax to sub the values. Couldn't find anything within my first google search so I thought I would share the answer after I figured it out to hopefully save the next guy sometime. Posting Q&A style is a feature of stackoverflow. meta.stackoverflow.com/questions/290038/…
-
Charlie Parker over 6 yearswhat if f is a matrix of symbols? as in
a = symarray('a', 3)
? -
Charlie Parker over 6 yearswhat if f is a matrix of symbols? as in
a = symarray('a', 3)
? -
Charlie Parker over 6 yearswhat if f is a matrix of symbols? as in
a = symarray('a', 3)
? -
mathtick over 3 yearsWhat is happening when this does not work? Is there a difference between Symbol and sympy.var?