3.2.4 方程求解

SymPy可以求解线性代数方程,一个或多个变量:

In [28]:

  1. solve(x**4 - 1, x)

Out[28]:

  1. [-1, 1, -I, I]

如你所见,第一个参数是假设等于0的表达式。它可以解一个很大的多项式方程,也可以有能力求解多个方程,可以将各自的多个变量作为元组以第二个参数给出:

In [29]:

  1. solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y])

Out[29]:

  1. {x: -3, y: 1}

也直接求解超越方程(有限的):

In [30]:

  1. solve(exp(x) + 1, x)

Out[30]:

  1. [I*pi]

多项式方程的另一个应用是factorfactor将多项式因式分解为可化简的项,并且可以计算不同域的因式:

In [31]:

  1. f = x**4 - 3*x**2 + 1
  2. factor(f)

Out[31]:

  1. (x**2 - x - 1)*(x**2 + x - 1)

In [32]:

  1. factor(f, modulus=5)

Out[32]:

  1. (x - 2)**2*(x + 2)**2

SymPy也可以解布尔方程,即,判断一个布尔表达式是否满足。对于这个情况,我们可以使用satisfiable函数:

In [33]:

  1. satisfiable(x & y)

Out[33]:

  1. {x: True, y: True}

这告诉我们(x & y)是真,当x和y都是True的时候。如果一个表达式不是True,即它的任何参数值都无法使表达式为真,那么它将返回False:

In [34]:

  1. satisfiable(x & ~x)

Out[34]:

  1. False