首页IT科技python 求微分(如何用Python求解微分方程组)

python 求微分(如何用Python求解微分方程组)

时间2025-06-20 10:50:27分类IT科技浏览4211
导读:odeint简介 scipy文档中将odeint函数和ode, comples_ode这两个类称为旧API,是scipy早期使用的微分方程求解器,但由于是Fortran实现的,尽管使用起来并不方便,但速度没得说,所以有的时候还挺推荐使用的。...

odeint简介

scipy文档中将odeint函数和ode, comples_ode这两个类称为旧API             ,是scipy早期使用的微分方程求解器                   ,但由于是Fortran实现的       ,尽管使用起来并不方便             ,但速度没得说                   ,所以有的时候还挺推荐使用的             。

其中       ,odeint的参数如下

scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0, tfirst=False)

其中func为待求解函数;y0为初值;t为自变量列表      ,其他参数都有默认选项                   ,可以不填             ,而且这些参数非常多      ,其中常用的有

args func中除了t之外的其他变量 Dfun func的梯度函数                   ,当此参数不为None时             ,若将col_deriv设为True,则可提升效率                    。 full_output 如果为True                   ,则额外返回一个参数字典 ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg 为True时打印信息      。 tfirst 当为False时                   ,func的格式为func(y,t...),否则格式为func(t, y...)

示例

对于常微分方程

θ

(

t

)

+

b

θ

(

t

)

+

c

sin

θ

(

t

)

=

b

=

0.25

;

c

=

5

θ

(

)

=

π

0.1

;

θ

(

)

=

\theta(t)+b\theta(t)+c\sin\theta(t)=0\\ b=0.25;\quad c=5\\ \theta(0)=\pi-0.1;\quad \theta(0)=0

θ′′(t)+bθ(t)+csinθ(t)=0b=0.25;c=5θ(0)=π0.1;θ(0)=0

将其中的二阶导数项用一个新变量替代             ,

ω

(

t

)

=

θ

(

t

)

\omega(t)=\theta(t)

ω(t)=θ(t)                   ,则常微分方程可拆分成微分方程组

θ

(

t

)

=

ω

(

t

)

ω

(

t

)

=

b

ω

(

t

)

c

sin

θ

(

t

)

\begin{aligned} \theta(t)&=\omega(t)\\ \omega(t)&=-b\omega(t)-c\sin\theta(t) \end{aligned}

θ(t)ω(t)=ω(t)=(t)csinθ(t)

y

=

[

θ

,

ω

]

y=[\theta, \omega]

y=[θ,ω]       ,则

y

=

[

θ

,

ω

]

y=[\theta, \omega]

y=[θ,ω]
             ,据此可设计函数func import numpy as np def pend(y, t, b, c): th, om = y dydt = [om, -b*om - c*np.sin(th)] return dydt

然后调用并求解

from scipy.integrate import odeint y0 = [np.pi-0.1, 0] t = np.linspace(0, 10, 101) sol = odeint(pend, y0, t, args=(0.25, 5))

然后绘制一下结果

import matplotlib.pyplot as plt plt.plot(t, sol[:,0], label="theta") plt.plot(t, sol[:,1], label="omega") plt.legend() plt.show()

这个形状还是比较离奇的      。

声明:本站所有文章                   ,如无特殊说明或标注       ,均为本站原创发布                    。任何个人或组织      ,在未征得本站同意时                   ,禁止复制             、盗用                    、采集      、发布本站内容到任何网站      、书籍等各类媒体平台             。如若本站内容侵犯了原著者的合法权益             ,可联系我们进行处理      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
seo整站排名(探秘SEO排名:让你的网站跻身前列)