此为应用数学第5次课。
常微分方程数值方法
差分法、有限元法、谱方法等。这里只介绍显式欧拉法。
欧拉法及其变种
问题描述:在
x∈[a,b]求解
y,满足
y′=f(x,y),y(x0)=y0
将
[a,b]等分成
N份,每份长度为
h,
x0=a,xi=a+ih。令
y(xi)为
xi处的真实值,
yi为拟合值。
前向欧拉法
由泰勒展开,有
y′(xi)=Δxy(xi+Δx)−y(xi)+o(Δx)
近似得到,
y′(xi)≈hy(xi+h)−y(xi)
因为
y′(xi)=f(xi,y(xi)),所以有
y(xi+1)−y(xi)≈hf(xi,y(xi))
从而得到前向欧拉法,
yi+1=yi+hf(xi,yi)
后向欧拉法
类似的,有
y′(xi+1)≈hy(xi+1)−y(xi)
由于
y′(xi+1)=f(xi+1,yi+1),得到
yi+1=yi+hf(xi+1,yi+1)
但由于
yi+1不预先知道,所以需要方程解出
yi+1,为隐式欧拉法了。可以使用预估校正法来利用后向欧拉的思想。
预估校正法
先用前向欧拉法得到对
yi+1的估计
yˉi+1,即
yˉi+1=yi+hf(xi,yi)
再用后向欧拉法进行校正
yi+1=yi+hf(xi+1,yˉi+1)
梯形法
综合一下前向欧拉和后向欧拉,可以得到一个平均主义的变种:
yi+1=yi+2h[f(xi,yi)+f(xi+1,yi+1)]
当然这仍然是一种隐式欧拉法。
在预估校正法中也可以采用类似的思想,有
yi+1=yi+2h[f(xi,yi)+f(xi+1,yˉi+1)]
2阶龙格库塔
2阶龙格库塔如下:
yi+1k1k2=yi+h[21k1+21k2]=f(xi,yi)=f(xi,yi+hk1)
可以看到,2阶龙格库塔和预估校正的梯形法非常类似,它们都使用了
yˉi+1处的梯度作为估计,只不过唯一的区别在于,预估校正法将这个梯度作用在
xi+1处作为后向估计,而2阶龙格库塔将它作为对
xi处梯度的估计。
4阶龙格库塔
这是最常用的龙格库塔法(因为如果阶数再高,还不如对
h取小一点)。
yi+1k1k2k3k4=yi+h[61k1+31k2+31k3+61k4]=f(xi,yi)=f(xi+h/2,yi+h/2k1)=f(xi+h/2,yi+h/2k2)=f(xi+h,yi+hk3)
当然这里的系数也是可以变的,只要最终的泰勒展开能够消掉只剩高阶微量就可以了。比如上课提到的GiU公式,就是另一套系数下的龙格库塔。
n阶龙格库塔法
龙格库塔可以继续细分到很高阶,它的格式为
yn+1k1k2k3ki=yn+hi=0∑Lλiki,∑λi=1=f(xn,yn)=f(xn+c2h,yn+c2hk1)=f(xn+c3h,yn+c3h(a31k1+a32k2))⋯=f(xn+cih,yn+cihj=1∑i−1aijkj)
但正如之前所述,太高阶意义不大,因此还是4阶最常用。
精度
定义:设
y(x)是精确解,若存在最大整数
p,使得
∣yi−y(xi)∣=o(hp+1),则称该方法是
p阶精度的。
前向欧拉法
∣y(xi+1)−yi+1∣=∣y(xi+1)−y(xi)−hf(xi,y(xi))∣=∣y(xi)+hy′(xi)+2h2y′′(xi)+o(h3)−y(xi)−hy′(xi)∣=∣2h2y′′(xi)+o(h3)∣=o(h2)
所以前向欧拉为一阶精度。
后向欧拉法
类似的,后向欧拉法也是一阶精度。
梯形法
∣y(xi+1)−yi+1∣=∣y(xi+1)−y(xi)−2h[f(xi,y(xi))+f(xi+1,y(xi+1)]∣=∣y(xi)+hy′(xi)+2h2y′′(xi)+6h3y′′′(xi)+o(h4)−y(xi)−2h[y′(xi)+y′(xi+1)]∣=∣hy′(xi)+2h2y′′(xi)+6h3y′′′(xi)+o(h4)−2h[y′(xi)+y′(xi)+hy′′(xi)+2h2y′′′(xi)+o(h4)]∣=∣−121h3y′′′(xi)+o(h4)∣=o(h3)
所以梯形法为二阶精度。
龙格库塔法
按照Butcher的结果,对于阶数为
r的龙格库塔法,当
r=1,2,3,4时,精度为
r;当
r=5,6,7时,精度为
r−1;当
r=8,9时,精度为
r−2;之后的精度小于
r−2。证明略。
收敛性证明
引理
如果
∣ξi+1∣≤A∣ξi∣+B,则
∣ξi+1∣≤Ak∣ξ0∣+A−1Ak−1B,
A̸=1。(
A=1时更简单,略)。
证明非常简单,就是一个等比数列求和。
收敛性定理
yn+1=yn+hϕ(xn,yn,h),如果
y是精确解,
yi是数值解,且存在
c0,使得局部截断误差
∣Ti+1∣=∣y(xi+1)−[y(xi)+hϕ(xi,y(xi),h)]∣≤c0hp+1
且存在
h0,使得
(x,y)∈Dδmax∣∣∣∣∂y∂p(x,y,h)∣∣∣∣≤L
其中
Dδ={(x,y)∣x∈[a,b],y∈[y(x)−δ,y(x)+δ]}
则,当
h<minh0,(δ/c0)1/p时,有最大截断误差
E(h)=max{y(xi+1)−yi+1}≤chp
其中,
c=Lc0[eL(b−a)−1]
证明
y(xi+1)yi+1y(xi+1)−yi+1=y(xi)+hϕ(xi,y(xi),h)+Ti+1=yi+hϕ(xi,yi,h)=y(xi)−yi+h[ϕ(xi,y(xi),h)−ϕ(xi,yi,h)]+Ti+1
数学归纳法。当
i=0,
∣y(x0)−y0∣=0≤chp。假设
i时成立,
∣y(xi)−yi∣≤chp,则
i+1时,
∣y(xi+1)−yi+1∣≤∣y(xi)−yi∣+h∣ϕ(xi,y(xi),h)−ϕ(xi,yi,h)∣+∣Ti+1∣≤∣y(xi)−yi∣+h∣∣∣∣∂y∂ϕ(y(xi)−yi)+o[(y(xi)−yi)3]∣∣∣∣+c0hp+1≤(Lh+1)∣y(xi)−yi∣+c0hp+1+o(h2p+1)
稳定性分析
对于
y′=f(x,y),令
{yi}是数值解,
{ζi}是如下问题的解:
ζi+1=ζi+h[ϕ(xi,ζi,h)+δi+1],ζ0=ζ(x0)+δ0
若存在
C,ϵ0,h0,使得当
ϵ∈(0,ϵ0),h∈(0,h0),∣δi∣<ϵ,对于
∀i,都有
∣ζi−yi∣<Cϵ,则称该方法是稳定的。
说人话,按照我个人的理解,收敛性证明是在看
yi能不能逼近
y(xi),而稳定性分析则在看我们能不能稳定地计算出
yi。我们给每次的
yi增加上一个不大于
ϵ的小误差,然后看这样算出来的
ζi是否和
yi之间的误差仍在常数倍误差内。
以下我们以
y′=λy,即
y=eλx为例。
前向欧拉法
yn+1=yn+hf(xn,yn)=yn+hλyn=(1+hλ)yn
ζn+1=(1+hλ)ζn
令
ϵn=yn−ζn,则
ϵn=(1+hλ)ϵn−1=⋯=(1+hλ)nϵ0
若
∣1+hλ∣<1,则稳定;否则不稳定。将其绘制到
λ-
h复平面上(注意这里以
λh整体的复平面,而不是
x轴为
λ,
y轴为
h),为一个圆心为
(−1,0),半径为
1的圆内部。
梯形法
yn+1=yn+2h[f(xn,yn)+f(xn+1,yn+1)]=yn+2h[λyn+λyn+1]
即,
(1−2λh)yn+1=(1+2λh)yn
即,
ϵn+1=∣∣∣∣∣1−2λh1+2λh∣∣∣∣∣ϵn
若
∣(1+2λh)/(1−2λh)∣<1,则稳定;否则不稳定。将其绘制到
λ-
h复平面上,为整个第二和第三象限。
后向欧拉法
yn+1=yn+hf(xn,yn)=yn+hλyn+1
即,
ϵn+1=∣∣∣∣1−λh1∣∣∣∣ϵn
若
∣1/(1−λh)∣<1,则稳定;否则不稳定。将其绘制到
λ-
h复平面上,为圆心为
(1,0),半径为
1的圆外部。