美文网首页
SymPy 符号运算库剩余部分介绍

SymPy 符号运算库剩余部分介绍

作者: autumn1919 | 来源:发表于2019-05-08 08:26 被阅读0次

1.11 微分方程

dsolve()用来对微分方程进行符号求解。包括两个参数:

  • 第一个参数是带未知函数的表达式
  • 第二个参数是需要求解的位置函数
    例,求解如下的微分方程:
    f^\prime(x)-f(x)=0
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()可以查看与指定微分方程对应的解法列表。
    以如下的微分方程为例:
    f^\prime(x)+f(x)=(cos(x)-sin(x))f^2(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 积分运算的补充

  • integrate(f,x,y):计算双重不定积分:\int\int f dxdy
  • integrate(f,(x,a,b),(y,c,d)):计算双重定积分:\int_c^d\int_a^b fdxdy
    一个不定积分的例子:
    \int xsin(x)dx
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()进行数值运算
    求如下定积分的数值解:
    \int_0^1 \frac{sin(x)}{x} d 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()无法求出精确解。

相关文章

网友评论

      本文标题:SymPy 符号运算库剩余部分介绍

      本文链接:https://www.haomeiwen.com/subject/yeepoqtx.html