01常微分方程(ODE)求解方法小结

01常微分方程(ODE)求解方法小结微分方程 是指含有未知函数及其导数的关系式

大家好,欢迎来到IT知识分享网。

后续陆续更新:传递函数讲解、工作点线性化、系统辨识、LMS

一、常微分方程介绍

1.微分方程

(1)微分方程定义

微分方程,是指含有未知函数及其导数的关系式。

解微分方程就是找出未知函数。

(2)微分方程分类

1.按函数个数
如果函数只有一个自变量,那么方程就称为常微分方程(ODE);
如果函数含有两个或者多个自变量,则成为偏微分方程(PDE)。

2.按方程阶数
最高阶导数是一阶导数,则称为一阶微分方程;
最高阶导数是二阶导数,则称为二阶微分方程。

3.按线性与否划分
如果一个微分方程中仅含有未知函数及其各阶导数作为整体的一次幂,则称它为线性微分方程。
可以理解为此微分方程中的未知函数y是不超过一次的,且此方程中y的各阶导数也应该是不超过一次的。

n阶线性常微分方程的一般表达式为:
a n ( x ) D n y ( x ) + . . . + a 0 ( x ) D 0 y ( x ) = f ( x ) a_n(x)D^ny(x)+…+a_0(x)D^0y(x)=f(x) an(x)Dny(x)++a0(x)D0y(x)=f(x)

二、一阶常微分方程迭代求解

问题描述:求解满足如下一阶常微分方程的函数
a 1 y ′ ( x ) + a 0 y ( x ) = f ( x ) , y ( x 0 ) = y 0 a_1y'(x)+a_0y(x)=f(x),y(x_0)=y_0 a1y(x)+a0y(x)=f(x),y(x0)=y0
亦即
y ′ ( x ) = f ( x , y ) , y ( x 0 ) = y 0 y'(x)=f(x,y),y(x_0)=y_0 y(x)=f(x,y),y(x0)=y0

1.欧拉法

欧拉法的核心思想是利用一阶导数的差分值代替实际值。亦即针对原本连续的函数,通过将自变量离散化,利用因变量一阶导数的差分值代替实际值,从而迭代求解出函数。

针对上述问题,先将自变量离散化,且设置步长为 Δ x \Delta x Δx

则在已知点 x 0 x_0 x0处有
a 1 y ( x 0 + Δ x ) − y ( x 0 ) Δ x + a 0 y 0 = f ( x 0 ) a_1\frac{y(x_0+\Delta x)-y(x_0)}{\Delta x}+a_0y_0=f(x_0) a1Δxy(x0+Δx)y(x0)+a0y0=f(x0)
化简可得:
y ( x 0 + Δ x ) = y ( x 0 ) + ( f ( x 0 ) − a 0 y 0 ) Δ x a 1 y(x_0+\Delta x)=y(x_0)+\frac{(f(x_0)-a_0y_0)\Delta x}{a_1} y(x0+Δx)=y(x0)+a1(f(x0)a0y0)Δx
而后根据 x 0 + Δ x x_0+\Delta x x0+Δx处的函数值可以推导 x 0 + 2 Δ x x_0+2\Delta x x0+x处的函数值,循环迭代即可得想要求出得函数。

通式:新值=旧值+斜率估计值*步长。

欧拉方法利用斜率(线性估计值),通过线性外推的办法预测出函数值在前进特定步长之后处的新值。

2.龙格-库塔法

在各种龙格-库塔法当中有一个方法十分常用,以至于经常被称为“RK4(四阶龙格-库塔法)”或者就是“龙格-库塔法”。该方法主要是在已知方程导数和初值信息,利用计算机仿真时应用,省去求解微分方程的复杂过程。

龙格-库塔法的基本形式为:
y ( x 0 + Δ x ) = y ( x 0 ) + ( a 1 k 1 + a 2 k 2 + a 3 k 3 + a 4 k 4 ) Δ x y(x_0+\Delta x)=y(x_0)+(a_1k_1+a_2k_2+a_3k_3+a_4k_4)\Delta x y(x0+Δx)=y(x0)+(a1k1+a2k2+a3k3+a4k4)Δx
针对上述欧拉法(下式)的迭代公式
y ( x 0 + Δ x ) = y ( x 0 ) + ( f ( x 0 ) − a 0 y 0 ) Δ x a 1 y(x_0+\Delta x)=y(x_0)+\frac{(f(x_0)-a_0y_0)\Delta x}{a_1} y(x0+Δx)=y(x0)+a1(f(x0)a0y0)Δx
四阶龙格-库塔法采用如下形式
y ( x 0 + Δ x ) = y ( x 0 ) + 1 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 ) Δ x y(x_0+\Delta x)=y(x_0)+\frac{1}{6}(k_1+2k_2+2k_3+k_4)\Delta x y(x0+Δx)=y(x0)+61(k1+2k2+2k3+k4)Δx
其中,
k 1 = f ( x 0 ) − a 0 y 0 a 1 k 2 = f ( x 0 + 1 2 Δ x ) − a 0 ( y 0 + 1 2 k 1 Δ x ) a 1 k 3 = f ( x 0 + 1 2 Δ x ) − a 0 ( y 0 + 1 2 k 2 Δ x ) a 1 k 4 = f ( x 0 + Δ x ) − a 0 ( y 0 + Δ x ) a 1 k_1=\frac{f(x_0)-a_0y_0}{a_1}\\ k_2=\frac{f(x_0+\frac{1}{2}\Delta x)-a_0(y_0+\frac{1}{2}k_1\Delta x)}{a_1}\\ k_3=\frac{f(x_0+\frac{1}{2}\Delta x)-a_0(y_0+\frac{1}{2}k_2\Delta x)}{a_1}\\ k_4=\frac{f(x_0+\Delta x)-a_0(y_0+\Delta x)}{a_1} k1=a1f(x0)a0y0k2=a1f(x0+21Δx)a0(y0+21k1Δx)k3=a1f(x0+21Δx)a0(y0+21k2Δx)k4=a1f(x0+Δx)a0(y0+Δx)

该斜率估计值是以下斜率的加权平均:
k 1 k_1 k1是时间段开始时的斜率;
k 2 k_2 k2是时间段中点的斜率;
k 3 k_3 k3也是中点的斜率;
k 4 k_4 k4是时间段终点的斜率,其y值用k3决定。

3.从泰勒展开视角看两种方法

已知,待求函数 y y y 在已知点 x 0 x_0 x0 处的泰勒展开式为
y ( x 0 + Δ x ) = y ( x 0 ) + y ′ ( x 0 ) Δ x + . . . + 1 n ! y n Δ x n + . . . y(x_0+\Delta x)=y(x_0)+y'(x_0)\Delta x+…+\frac{1}{n!}y^{n}\Delta x^n+… y(x0+Δx)=y(x0)+y(x0)Δx++n!1ynΔxn+
欧拉法与泰勒展开的联系:
y ( x 0 + Δ x ) = y ( x 0 ) + ( f ( x 0 ) − a 0 y 0 ) Δ x a 1 y(x_0+\Delta x)=y(x_0)+\frac{(f(x_0)-a_0y_0)\Delta x}{a_1} y(x0+Δx)=y(x0)+a1(f(x0)a0y0)Δx
可以看出欧拉法其实是用了泰勒一阶展开逐次递推的;

龙格-库塔法与泰勒展开的联系(以二阶龙格-库塔法推导为例):
y ( x 0 + Δ x ) = y ( x 0 ) + ( a 1 k 1 + a 2 k 2 ) Δ x k 1 = f ( x 0 , y 0 ) , k 2 = f ( x 0 + p 1 Δ x , y 0 + q 1 k 1 Δ x ) y(x_0+\Delta x)=y(x_0)+(a_1k_1+a_2k_2)\Delta x \\ k_1=f(x_0,y_0),k_2=f(x_0+p_1\Delta x,y_0+q_1k_1\Delta x) y(x0+Δx)=y(x0)+(a1k1+a2k2)Δxk1=f(x0,y0),k2=f(x0+p1Δx,y0+q1k1Δx)

而根据泰勒展开,有
k 2 = f ( x 0 , y 0 ) + p 1 Δ x ∂ f ∂ x + q 1 k 1 Δ x ∂ f ∂ y + O ( Δ x 2 ) k_2=f(x_0,y_0)+p_1\Delta x\frac{\partial f}{\partial x}+q_1k_1\Delta x\frac{\partial f}{\partial y}+O(\Delta x^2) k2=f(x0,y0)+p1Δxxf+q1k1Δxyf+O(Δx2)
代入上式有:
y ( x 0 + Δ x ) = y ( x 0 ) + [ ( a 1 f ( x 0 , y 0 ) + a 2 f ( x 0 , y 0 ) ] Δ x + [ a 2 p 1 ∂ f ∂ x + a 2 q 1 f ( x 0 , y 0 ) ∂ f ∂ y ] Δ x 2 y(x_0+\Delta x)=y(x_0)+[(a_1f(x_0,y_0)+a_2f(x_0,y_0)]\Delta x +[a_2p_1\frac{\partial f}{\partial x}+a_2q_1f(x_0,y_0)\frac{\partial f}{\partial y}]\Delta x^2 y(x0+Δx)=y(x0)+[(a1f(x0,y0)+a2f(x0,y0)]Δx+[a2p1xf+a2q1f(x0,y0)yf]Δx2
对比可知,
a 1 + a 2 = 1 a 1 p 1 = a 2 q 1 = 1 2 a_1+a_2=1\\ a_1p_1=a_2q_1=\frac{1}{2} a1+a2=1a1p1=a2q1=21
同理可知,四阶龙格-库塔法相当于用泰勒四阶展开递推,精度较高。

三、一阶常微分方程组迭代求解

高阶微分方程一般可以等价于多个一阶方程组的形式,且实际问题也往往需要求解几个耦合联立的常微分方程组成的方程组。

方程组的一般表达形式为(动态方程)
d y 1 d x = f ( x , y 1 , . . . , y n ) d y 2 d x = f ( x , y 1 , . . . , y n ) . . . d y n d x = f ( x , y 1 , . . . , y n ) y 1 ( x 0 ) = y 0 . . . y n ( x 0 ) = y n 0 \frac{dy_1}{dx}=f(x,y_1,…,y_n)\\ \frac{dy_2}{dx}=f(x,y_1,…,y_n)\\…\\ \frac{dy_n}{dx}=f(x,y_1,…,y_n)\\y_1(x_0)=y_0…y_n(x_0)=y_{n0} dxdy1=f(x,y1,,yn)dxdy2=f(x,y1,,yn)dxdyn=f(x,y1,,yn)y1(x0)=y0yn(x0)=yn0
上述所介绍的欧拉法与龙格-库塔法均可用于数值求解微分方程组。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142916.html

(0)
上一篇 2025-05-07 13:00
下一篇 2025-05-07 13:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信