How to substitute multiple symbols in an expression in sympy?

44,962

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
Share:
44,962
Wesley
Author by

Wesley

Updated on October 04, 2020

Comments

  • Wesley
    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
    
  • Wesley
    Wesley over 8 years
    Was 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
    Charlie Parker over 6 years
    what if f is a matrix of symbols? as in a = symarray('a', 3)?
  • Charlie Parker
    Charlie Parker over 6 years
    what if f is a matrix of symbols? as in a = symarray('a', 3)?
  • Charlie Parker
    Charlie Parker over 6 years
    what if f is a matrix of symbols? as in a = symarray('a', 3)?
  • mathtick
    mathtick over 3 years
    What is happening when this does not work? Is there a difference between Symbol and sympy.var?