常微分方程基本概念
常微分方程(ODE) :未知函数为一元函数的微分方程
常微分方程的阶数表示方程中未知函数的最高阶导数次数
高阶常微分方程可以通过变量代换转化为一阶常微分方程组,例如:
y′′+y′+y=0
可以转化为
{y′=uu′=−y−u
因此,只需考虑一阶常微分方程组,未知函数的变量为t时,可记作
y′=f(t,y)
ODE的解是一个函数簇,一般需要添加一个条件来得到唯一确定的函数,此条件成为边界条件或初始条件,最常见的形式为:
y(t0)=y0
一些特殊的定义:
- 线性常微分方程:y′=f(t,y)=a(t)y+b(t)
- 线性齐次常微分方程:y′=a(t)y
- 线性齐次常系数常微分方程:y′=λy
定义(ODE初值问题的稳定性)
对于一个ODE初值问题,若
- t→+∞时,初值扰动造成的y(t)的偏差有界,则称此初值问题稳定
- t→+∞时,初值扰动造成的y(t)偏差随扰动减小趋于零,则称此初值问题渐进稳定
- t→+∞时,初值扰动造成的y(t)偏差发散,则称此初值问题不稳定
注 这里要求t→+∞是因为这是一般实际应用中考虑的情况,这里t的含义往往是时间
例 考虑{y′=λyy(t0)=y0的稳定性
准确解为
y=y0eλ(t−t0)
初值扰动δ后,得到的解为
y=(y0+δ)eλ(t−t0)
于是偏差为
Δy=δeλ(t−t0)
显然,问题稳定等价于
λ≤0
对一般的非线性ODE方程组
y′=f(t,y)
此方程组可以线性近似为
y′=Jy+b(t)
其中J为f对y的Jacobi矩阵
稳定性与b(t)项无关,此时问题局部稳定等价于J的所有特征值实部≤0
ODE初值问题的数值解法
一般地,初值问题通过对t离散化迭代计算来求解数值解,成为离散变量法
每一步迭代计算的t记为
t0<t1<t2<⋯
相邻t的间距hn=tn+1−tn称为步长
实际近似解求解方程一般形如
yn+1=G(yn+1+yn+yn−1+⋯+yn−k)
- 若k=0,称为单步法,否则称为多步法
- 若右端不含yn+1,称为显格式方法,否则称为隐格式方法
欧拉法
为显式单步法,公式为:
yn+1=yn+hnf(tn,yn)
这实际上直接使用数值微分的向前差分公式得到,即
y′=f(t,y)
hnyn+1−yn=f(tn,yn)
除了上面的微分理解,也可以使用积分理解:
y(tn+1)=y(tn)+∫tntn+1f(t,y)dt≈yn+hnf(tn,yn)
这里相当于使用左矩形近似积分
数值解法的稳定性
上面我们讨论了ODE初值问题的稳定性,这是与具体方法无关的,这里讨论一个具体的数值解法的稳定性
定义 若在节点tn上的近似值yn有扰动δn,则对m>n,此扰动引起的ym的误差满足∣δm∣≤∣δn∣,则称此方法稳定
例 考虑欧拉法解y′=λy的稳定性(步长为常数)
yn+1=yn+hλyn=(1+hλ)yn
于是
δn+1=(1+hλ)δn
欧拉法稳定等价于
∣1+hλ∣≤1
由于算法稳定一般首先要求问题稳定,我们要求λ≤0
于是
h≤−λ2
即:要想让欧拉法稳定,步长不能太大
定义(局部截断误差) 假设yn+1计算中依赖的所有前序值 全部精确 ,则数值解法的局部截断误差定义为:
ln+1=y(tn+1)−yn+1
注 局部截断误差反映了计算中 一步 的误差
例 欧拉法解y′=λy的局部截断误差
ln+1=y(tn+1)−yn+1=y(tn)[ehλ−1−hλ]=O(h2)
对一般的y′=f(t,y),有相同的结论:
ln+1=O(h2)
定义 若某种解法的局部截断误差ln+1=O(hp+1),则称该方法具有p阶准确度
注 局部截断误差的累计结果,即整体截断误差,比局部截断误差要低一阶。因此准确度定义也比局部截断误差低一阶
注 准确度表示的是迭代点不变的情况下,随h减小,误差的减小情况,至少具有1阶准确度表示方法是收敛的
变形欧拉法
欧拉法的积分理解为使用 左矩形 近似积分,但我们还有其他的做法:
- 向后欧拉法,使用 右矩形 近似积分,即yn+1=yn+hnf(tn+1,yn+1)
- 梯形法,使用 梯形 近似积分,即yn+1=yn+hn/2[f(tn,yn)+f(tn+1+yn+1)]
两者均为单步隐格式方法
向后欧拉法分析
对y′=λy,计算公式为
yn+1=yn+hλyn+1
即
yn+1=1−hλ1yn
于是
δn+1=1−hλ1δn
稳定条件为
∣1−hλ∣≥1
只要问题稳定,即λ≤0,上述不等式必然成立,故向后欧拉法无条件稳定
其局部截断误差满足
ln+1=y(tn+1)−yn+1
=y(tn+1)−yn−hf(tn+1,yn+1)
=y(tn+1)−y(tn)−hf(tn+1,yn+1)
=hf(tn+1,y(tn+1))−hf(tn+1,yn+1)+O(h2)
=hfy′(tn+1,ξ)[y(tn+1)−yn+1]+O(h2)
=hfy′(tn+1,ξ)ln+1+O(h2)
故
ln+1=1−hfy′(tn+1,ξ)1O(h2)=O(h2)
具有1阶准确度
梯形法类似,也具有无条件稳定性,但有2阶准确度
Runge-Kutta方法
引入
这是由欧拉法改进的一种显式方法,其思路为类似数值积分中的中矩形或梯形公式
如果使用中矩形公式,我们需要做:
yn+1=yn+∫tntn+1f(t,y)
≈yn+f(tn+2hn,y(tn+2hn))
然而, 中点处的y值无法确定,这里使用欧拉法估算:
k1=f(tn,yn)
k2=f(tn+2h,yn+2hk1)
yn+1=yn+hk2
上面的方法称为中点公式
类似地,我们也可以先用欧拉法估算终点处的函数值:
k1=f(tn,yn)
k2=f(tn+h,yn+hk1)
yn+1=yn+2h(k1+k2)
上面的方法称为Heun方法或改进的欧拉法
中点公式和Heun方法的共同点是:
- 都使用了两次函数求值,其中一次使用了欧拉法估计
- 都比欧拉法准确
- 都属于2级R-K公式的特例
Runge-Kutta方法概述
Runge-Kutta是一般意义在的显式、单步数值法,我们从以下的数值积分出发:
yn+1=yn+∫tntn+hf(s,y(s))ds
使用某个机械求积公式,则
yn+1=yn+hi=1∑rcif(tn+λih,y(tn+λih))
然而,式中的y(tn+λih)只能估算,设所有这些f值的估计值分别为k1,k2,⋯,kr,则得到迭代公式
yn+1=yn+hi=1∑rciki
一般的R-K方法描述如下:
- 首先在[tn,tn+1]上取r个不同的t值,此时的公式称为r级公式,估算每个f(t,y)
- 第一个估算值固定为k1=f(tn,yn)
- 第二个估算值使用欧拉法估算,即k2=f(tn+λ2h,yn+λ2hk1)
- 后续估算值要综合前面所有信息,例如第三个值如下法计算:k3=f(tn+λ3h,yn+μ3,1hk1+μ3,2hk2)
- 其中μ3,j为待定系数,这些系数选择需要时公式准确度阶数尽可能高
- 最终计算公式为yn+1=yn+h∑i=1rciki
于是,上面介绍的中点公式和改进的欧拉法为λ2取值不同的2级R-K公式
一种经典的4级、4阶的R-K法为:
k1=f(tn,yn)
k2=f(tn+2h,yn+2hk1)
k3=f(tn+2h,yn+2hk2)
k4=f(tn+h,yn+hk3)
yn+1=yn+6h(k1+2k2+2k3+k4)
R-K法参数的推导
以2级R-K公式为例,对以下公式
yn+1=yn+h(c1k1+c2k2)
k1=f(tn,yn)
k2=f(tn+λ2h,yn+λ2hk1)
求c1,c2,λ2使公式准确度阶数尽可能高
对模型问题y′=λy,考虑到
yn+1=yn+c1hk1+c2hk2
=yn+c1hλyn+c2hλ(yn+λ2hλyn)
=y(tn)[1+(c1+c2)hλ+c2h2λ2λ2]
而
y(tn+1)=y(tn)+hy′(tn)+⋯
=y(tn)[1+hλ+2h2λ2+⋯]
此时最高只能达到2阶准确度,即y(tn+1)=yn+1+O(h3),此时的条件为
c1+c2=1
c2λ2=21
对中点公式而言
c1=0,c2=1,λ2=21
对改进的欧拉法而言
c1=c2=21,λ2=1
故它们都是有2阶准确度的2级R-K公式
事实上,不超过4级的R-K公式的准确度阶数等于其级数,而超过4级的R-K公式的准确度阶数无法达到级数,故一般使用的最高级公式就是4级R-K公式
显式单步法的相容性条件
一般的显式单步法形如
yn+1=yn+hϕ(tn,yn,h)
注 显然h→0+limyn+1=yn,故递增项应至少是h的一阶量
最简单的单步法即欧拉法具有1阶准确度,因而更复杂的单步法如果要有效,必须至少具有1阶准确度
对欧拉法,我们有
y(tn+1)=y(tn)+hf(tn,y(tn))+O(h2)
要想让
y(tn+1)=y(tn)+hϕ(tn,y(tn),h)+O(h2)
只需让
ϕ(tn,y(tn),h)=f(tn,y(tn))+O(h)
一般情况下ϕ都是h的连续函数,于是这等价于
ϕ(tn,y(tn),0)=f(tn,y(tn))
上述条件是显式单步法有效的基本条件,称为相容性条件
对于常见的单步法形式:
yn+1=yn+hi=1∑rciki
ki=f(tn+λih,yn+hX)
相容性条件等价于
i=1∑rci=1