数学 - 微分方程数值解 - 第 1 章 一阶常微分方程初值问题 - 1.4 线性多步公式

1.4 线性多步法

单步法的一般形式为 yn+1=yn+hφ(xn,yn,xn+1,yn+1,h),显式单步法为 yn+1=yn+hφ(xn,yn,h),其中 φ 称为增量函数。

线性多步法一般形式:

(1.4.1)yn+1=i=0rαiyni+hi=1rβifni

其中 fni=f(xni,yni)αiβi 为待定系数。

显然,当 β1=0 是公式为显式格式,β10 是公式为隐式格式。

例如,显式线性三步法的形式为

yn+1=i=02αiyni+hi=02βifni

几何意义:

1.4.1 线性多部公式导出

对线性多步法的一般形式 (1.4.1) 做 Taylor 展开求解局部截断误差。

考虑 yn+1

yn+1=i=0rαiyni+hi=1rβifni

展开 yn+1 之前,要估计 ynifni

yni=y(xnih)=yn+h(i)yn+h22(i)2yn++hpp!(i)pyn(p)+O(hp+1)fni=y(xni)=yn+h(i)yn+h22(i)2yn++hp1(p1)!(i)p1yn(p)+O(hp)fn+1=f(xn+1,y(xn+1))=y(xn+1)=yn+hyn+h22yn++hp1(p1)!yn(p)+O(hp)

因此得到 yn+1

yn+1=[i=0rαi]yn+h[i=1r(i)αi+i=1rβi]yn+h22[i=1r(i)2αi+2i=1r(i)βi]yn++hpp![i=1r(i)pαi+pi=1r(i)p1βi]yn(p)+O(hp+1)

再考虑 y(xn+1)

y(xn+1)=yn+hyn+h22!yn++hpp!yn(p)+O(hp+1)

要求局部截断误差最小,需待定参数满足:

{i=0rαi=1i=1r(1)kαi+ki=1r(i)k1βi=1,k=1,,p

p 阶公式的局部截断误差为

Rn+1=hp+1(p+1)![1i=1r(i)p+1αi(p+1)i=1r(i)pβi]yn(p+1)+O(hp+2)

1.4.2 常用的线性多步公式

(1) Adams 公式

四阶 Adams 显式公式:

yn+1=yn+h4(55fn59fn1+37fn29fn3)

局部截断误差为:

Rn+1=251720h5yn(5)+O(h6)

四阶 Adams 隐式公式:

yn+1=yn+h24(9fn+1+19fn5fn1+fn2)

局部截断误差为:

Rn+1=19720h5yn(5)+O(h6)

(2) Milne 公式

Milne 公式:

yn+1=yn3+43h(2fnfn1+2fn2)

局部截断误差为:

Rn+1=1445h5yn(5)+O(h6)

(3) Hamming 公式

Hamming 公式:

yn+1=18(9ynyn2)+38h(fn+1+2fnfn1)

局部截断误差为:

Rn+1=140h5yn(5)+O(h6)

一些说明:

  • 线性多步公式不能自启动,一般需要用同阶的单步法求得初值后再用线性多步公式计算。

  • 一般地,同阶隐式公式比同阶显式公式精确,但隐式公式计算复杂,需要迭代法求解。

1.4.3 预测-校正系统

Adams 预测-校正公式:

{y¯n+1=yn+h24(55fn59fn1+37fn29fn3)yn+1=yn+h24(9f(xn+1,y¯n+1)+19fn5fn1+fn2)

Milne - Hamming 预测-校正公式:

{y¯n+1=yn3+43h(2fnfn1+2fn2)yn+1=18(9ynyn2)+38h(f(xn+1,y¯n+1)+2fnfn1)

例 1.4.1

讨论二步公式 yn+1=yn1+h3(fn+1+4fn+fn1) 怎么由数值积分公式导出,并求出它的局部截断误差,判断是几阶公式。

解:将初值问题转化为等价的积分形式

y(xn+1)y(xn1)=xn1xn+1f(x,y)dx

F(x)=f(x,y(x)),利用 Simpson 公式

y(xn+1)y(xn1)h3(F(xn1)+4F(xn)+F(xn+1))

由此得求解格式:

yn+1=yn1+h3(fn1+4fn+fn+1)

其中 fk=f(xk,yk)k=n1,n,n+1

然后计算局部截断误差。

先考虑 yn+1,有迭代格式可知需先估计 yn1fn1fnfn+1

yn1=y(xnh)=ynhyn+h22ynh33!yn+h44!yn(4)h55!yn(5)+O(h6)fn1=f(xn1,y(xn1))=y(xn1)=y(xnh)=ynhyn+h22ynh33!yn(4)+h44!yn(5)+O(h5)fn+1=f(xn+1,y(xn+1))=y(xn+1)=y(xn+h)=yn+hyn+h22yn+h33!yn(4)+h44!yn(5)+O(h5)

可得 yn+1

yn+1=yn1+h3(fn+1+4fn+fn1)=yn+hyn+h22yn+h33!yn+h44!yn(4)+7h5360yn(5)+O(h6)

考虑 y(xn+1)

y(xn+1)=y(xn+h)=yn+hyn+h22!yn++h55!yn(5)+O(h6)

可得局部截断误差为

Rn+1=y(xn+1)yn+1=(15!7360)h5yn(5)+O(h6)=h590yn(5)+O(h6)

解毕。

posted on   Black_x  阅读(480)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示