Skip to content

Expressions and Substitutions

Expressions and Substitutions

Symbolic math variables can be combined into symbolic math expressions. Once in an expression, symbolic math variables can be exchanged with substituion.

Expressions

A symbolic math expression is a combination of symbolic math variables with numbers and mathematical operators (such as +,-,/ and *. The standard Python rules for calculating numbers apply in SymPy symbolic math expressions.

After the symbols x and y are created, a symbolic math expression using x and y can be created.

In [1]:
from sympy import symbols

x, y = symbols('x y') expr = 2*x + y

Substitution

Use SymPy's .subs() method to insert a numerical value into a symbolic math expression. The first argument of the .subs() method is the variable and the second argument is the numerical value. In the expression above:

2x +y

If we substitute

x = 2

The resulting expression should be

$$ 2(2) + y $$ $$ 4 +y $$

In [2]:
expr.subs(x, 2)

Out[2]:
y + 4

The .subs() method does not replace variables in place, it only completes a one-time substitution. If expr is called after the .subs() method is applied, the original expr expression is returned.
In [3]:
expr

Out[3]:
2*x + y

To make the substitution permanent, a new expression object needs to be assigned to the output of the .subs() method.
In [4]:
expr = 2*x + y
expr2 = expr.subs(x, 2)
expr2

Out[4]:
y + 4

SymPy variables can also be substituted into SymPy expressions. In the code section below, the symbol z is substituted for the symbol x (z replaces x).
In [5]:
x, y, z = symbols('x y z')
expr = 2*x + y
expr2 = expr.subs(x, z)
expr2

Out[5]:
y + 2*z

Expressions can also be substituted into other expressions. Consider the following:

2x + y

substitute in

y = 2x^2 + z^{-3}

results in

2x + 2x^2 + z^{-3}
In [6]:
x, y, z = symbols('x y z')
expr = 2*x + y
expr2 = expr.subs(y, 2*x**2 + z**(-3))
expr2
Out[6]:
2*x**2 + 2*x + z**(-3)

A practical example involving symbolic math variables, expressions and substitutions could include a large equation and several replacements.

n_0e^{-Q_v/RT}
n_0 = 3.48 \times 10^{-6}
Q_v = 12,700
R = 8.31

$$ T = 1000 + 273 $$

In [7]:
from sympy import symbols, exp
n0, Qv, R, T = symbols('n0 Qv R T')
expr = n0exp(-Qv/(RT))

Multiply SymPy subs() methods can be chained together to substitute multiple variables in one line of code.
In [8]:
expr.subs(n0, 3.48e-6).subs(Qv,12700).subs(R, 8031).subs(T, 1000+273)

Out[8]:
3.48e-6*exp(-12700/10223463)

To evaluate an expression as a floating point number, use SymPy's .evalf() method.
In [9]:
expr2 = expr.subs(n0, 3.48e-6).subs(Qv,12700).subs(R, 8031).subs(T, 1000+273)

In [10]:
expr2.evalf()

Out[10]:
3.47567968697765e-6