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
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设置为alldsolve()则会返回所有解法。

1.12 积分运算的补充

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)
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

计算如下定积分:
\int_0^\infty \frac{sin(x)}{x} d x

In [34]: o=symbols("o")
In [35]: epi=Integral(sin(x)/x,(x,0,oo))
In [36]: epi.doit()
Out[36]: pi/2

此时,使用evalf()无法求出精确解。

上一篇下一篇

猜你喜欢

热点阅读