3.2.4 方程求解
SymPy可以求解线性代数方程,一个或多个变量:
In [28]:
solve(x**4 - 1, x)
Out[28]:
[-1, 1, -I, I]
如你所见,第一个参数是假设等于0的表达式。它可以解一个很大的多项式方程,也可以有能力求解多个方程,可以将各自的多个变量作为元组以第二个参数给出:
In [29]:
solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y])
Out[29]:
{x: -3, y: 1}
也直接求解超越方程(有限的):
In [30]:
solve(exp(x) + 1, x)
Out[30]:
[I*pi]
多项式方程的另一个应用是factor
。factor
将多项式因式分解为可化简的项,并且可以计算不同域的因式:
In [31]:
f = x**4 - 3*x**2 + 1
factor(f)
Out[31]:
(x**2 - x - 1)*(x**2 + x - 1)
In [32]:
factor(f, modulus=5)
Out[32]:
(x - 2)**2*(x + 2)**2
SymPy也可以解布尔方程,即,判断一个布尔表达式是否满足。对于这个情况,我们可以使用satisfiable
函数:
In [33]:
satisfiable(x & y)
Out[33]:
{x: True, y: True}
这告诉我们(x & y)
是真,当x和y都是True的时候。如果一个表达式不是True,即它的任何参数值都无法使表达式为真,那么它将返回False:
In [34]:
satisfiable(x & ~x)
Out[34]:
False