SymPy 符号运算库剩余部分介绍
2019-05-08 本文已影响0人
autumn1919
1.11 微分方程
dsolve()
用来对微分方程进行符号求解。包括两个参数:
- 第一个参数是带未知函数的表达式
- 第二个参数是需要求解的位置函数
例,求解如下的微分方程:
In [5]: x=symbols('x')
In [6]: f=symbols('f',cls=Function)
In [7]: dsolve(Derivative(f(x),x)-f(x),f(x))
Out[7]: Eq(f(x), C1*exp(x)) #最后的结果为f(x)=c1*e^x
- 不同形式的微分方程需要使用不同的解法,
classify_ode()
可以查看与指定微分方程对应的解法列表。
以如下的微分方程为例:
In [8]: eq=Eq(f(x).diff(x)+f(x),(cos(x)-sin(x))*f(x)**2)
In [9]: classify_ode(eq,f(x))
Out[9]: ('1st_power_series', 'lie_group')
可以通过dsolve()
的hint
参数指定解法,默认采用返回值中的第一种解法。
In [11]: dsolve(eq,f(x),hint="lie_group") #lie_group的解法,采用默认解法的解较长
Out[11]: Eq(f(x), 1/(C1*exp(x) - sin(x)))
也可以将hint
设置为all
,dsolve()
则会返回所有解法。
1.12 积分运算的补充
-
integrate(f,x,y)
:计算双重不定积分: -
integrate(f,(x,a,b),(y,c,d))
:计算双重定积分:
一个不定积分的例子:
In [15]: e=Integral(x*sin(x),x)
In [16]: e
Out[16]: Integral(x*sin(x), x)
In [17]: e.doit() #doit()方法计算不定积分
Out[17]: -x*cos(x) + sin(x)
-
evalf()
进行数值运算
求如下定积分的数值解:
In [18]: es=Integral(sin(x)/x,(x,0,1))
In [19]: print(es.evalf())
0.946083070367183
In [20]: print(es.evalf(20)) #指定精度
0.94608307036718301494
计算如下定积分:
In [34]: o=symbols("o")
In [35]: epi=Integral(sin(x)/x,(x,0,oo))
In [36]: epi.doit()
Out[36]: pi/2
此时,使用evalf()
无法求出精确解。