作为一名Python小白,在使用 sympy.solve() 函数解方程时遇到颇多问题,在此记录一下遇到的问题和解决办法。
函数的简单使用
用 sympy.solve() 函数来解单一方程的调用方式可以表示为 sympy.solve(表达式,符号) 。下面的代码演示了怎样解 exp ( x ) − 3 = 0 \exp(x)-3=0 exp(x)−3=0这个方程。
import sympy
from sympy import *
d = sympy.Symbol("d")
b = sympy.solve(sympy.exp(d)-3,d)
print(b)
可以得到 log 3 \log3 log3的精确表达式。
遇见的问题
问题1 TypeError: can’t convert expression to float报错
该问题是将 math 库中的运算符用在了表达式中,如 log \log log, sin \sin sin, exp \exp exp等。应该用 sympy 库中的运算符,可以在方程表达式中用 sympy.log() 语句指定,或者去掉开头的 import math 语句。
问题2 No algorithms are implemented to solve equation报错
如下面的代码所示,我们尝试解 x + exp ( x ) + sin ( x ) − 10 = 0 \,x+\exp(x)+\sin(x)-10=0 x+exp(x)+sin(x)−10=0这个方程。
import sympy
from sympy import *
d = sympy.Symbol("d")
b = sympy.solve(d+sympy.exp(d)+sympy.sin(d)-10,d)
print(b)
结果是报错,没有算法来解这个方程,换种说法就是不能得到解析解。我们可以用数值计算函数 sympy.nsolve() 来近似计算的到数值解。具体用法如下:
import sympy
from sympy import *
d = sympy.Symbol("d")
b=sympy.nsolve(d+sympy.exp(d)+sympy.sin(d)-10,0)
print(b)
运行程序可以得到结果约为1.962,十分精确。
总结
在用Python的 sympy 库函数来解方程时会遇到以上两个问题,总体来说 sympy.solve() 函数能得到精确表达式,但是能解的方程有限;而 sympy.nsolve() 适用范围较广,但是只能得到近似解。