1.4 线性多步法
单步法的一般形式为 yn+1=yn+hφ(xn,yn,xn+1,yn+1,h),显式单步法为 yn+1=yn+hφ(xn,yn,h),其中 φ 称为增量函数。
线性多步法一般形式:
yn+1=r∑i=0αiyn−i+hr∑i=−1βifn−i(1.4.1)
其中 fn−i=f(xn−i,yn−i),αi 和 βi 为待定系数。
显然,当 β−1=0 是公式为显式格式,β−1≠0 是公式为隐式格式。
例如,显式线性三步法的形式为
yn+1=2∑i=0αiyn−i+h2∑i=0βifn−i
几何意义:
1.4.1 线性多部公式导出
对线性多步法的一般形式 (1.4.1) 做 Taylor 展开求解局部截断误差。
考虑 yn+1
yn+1=r∑i=0αiyn−i+hr∑i=−1βifn−i
展开 yn+1 之前,要估计 yn−i 和 fn−i。
yn−i=y(xn−ih)=yn+h(−i)y′n+h22(−i)2y′′n+⋯+hpp!(−i)py(p)n+O(hp+1)fn−i=y′(xn−i)=y′n+h(−i)y′′n+h22(−i)2y′′′n+⋯+hp−1(p−1)!(−i)p−1y(p)n+O(hp)fn+1=f(xn+1,y(xn+1))=y′(xn+1)=y′n+hy′′n+h22y′′′n+⋯+hp−1(p−1)!y(p)n+O(hp)
因此得到 yn+1,
yn+1=[r∑i=0αi]yn+h[r∑i=1(−i)αi+r∑i=−1βi]y′n+h22[r∑i=1(−i)2αi+2r∑i=−1(−i)βi]y′′n+⋯+hpp![r∑i=1(−i)pαi+pr∑i=−1(−i)p−1βi]y(p)n+O(hp+1)
再考虑 y(xn+1)
y(xn+1)=yn+hy′n+h22!y′′n+⋯+hpp!y(p)n+O(hp+1)
要求局部截断误差最小,需待定参数满足:
⎧⎪
⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪
⎪⎩r∑i=0αi=1r∑i=1(−1)kαi+kr∑i=−1(−i)k−1βi=1,k=1,⋯,p
p 阶公式的局部截断误差为
Rn+1=hp+1(p+1)![1−r∑i=1(−i)p+1αi−(p+1)r∑i=−1(−i)pβi]y(p+1)n+O(hp+2)
1.4.2 常用的线性多步公式
(1) Adams 公式
四阶 Adams 显式公式:
yn+1=yn+h4(55fn−59fn−1+37fn−2−9fn−3)
局部截断误差为:
Rn+1=251720h5y(5)n+O(h6)
四阶 Adams 隐式公式:
yn+1=yn+h24(9fn+1+19fn−5fn−1+fn−2)
局部截断误差为:
Rn+1=−19720h5y(5)n+O(h6)
(2) Milne 公式
Milne 公式:
yn+1=yn−3+43h(2fn−fn−1+2fn−2)
局部截断误差为:
Rn+1=1445h5y(5)n+O(h6)
(3) Hamming 公式
Hamming 公式:
yn+1=18(9yn−yn−2)+38h(fn+1+2fn−fn−1)
局部截断误差为:
Rn+1=−140h5y(5)n+O(h6)
一些说明:
1.4.3 预测-校正系统
Adams 预测-校正公式:
⎧⎪
⎪⎨⎪
⎪⎩¯¯¯yn+1=yn+h24(55fn−59fn−1+37fn−2−9fn−3)yn+1=yn+h24(9f(xn+1,¯¯¯yn+1)+19fn−5fn−1+fn−2)
Milne - Hamming 预测-校正公式:
⎧⎪
⎪⎨⎪
⎪⎩¯¯¯yn+1=yn−3+43h(2fn−fn−1+2fn−2)yn+1=18(9yn−yn−2)+38h(f(xn+1,¯¯¯yn+1)+2fn−fn−1)
例 1.4.1
讨论二步公式 yn+1=yn−1+h3(fn+1+4fn+fn−1) 怎么由数值积分公式导出,并求出它的局部截断误差,判断是几阶公式。
解:将初值问题转化为等价的积分形式
y(xn+1)−y(xn−1)=∫xn+1xn−1f(x,y)dx
令 F(x)=f(x,y(x)),利用 Simpson 公式。
y(xn+1)−y(xn−1)≈h3(F(xn−1)+4F(xn)+F(xn+1))
由此得求解格式:
yn+1=yn−1+h3(fn−1+4fn+fn+1)
其中 fk=f(xk,yk),k=n−1,n,n+1
然后计算局部截断误差。
先考虑 yn+1,有迭代格式可知需先估计 yn−1、fn−1、fn 和 fn+1。
yn−1=y(xn−h)=yn−hy′n+h22y′′n−h33!y′′′n+h44!y(4)n−h55!y(5)n+O(h6)fn−1=f(xn−1,y(xn−1))=y′(xn−1)=y′(xn−h)=y′n−hy′′n+h22y′′′n−h33!y(4)n+h44!y(5)n+O(h5)fn+1=f(xn+1,y(xn+1))=y′(xn+1)=y′(xn+h)=y′n+hy′′n+h22y′′′n+h33!y(4)n+h44!y(5)n+O(h5)
可得 yn+1 为
yn+1=yn−1+h3(fn+1+4fn+fn−1)=yn+hy′n+h22y′′n+h33!y′′′n+h44!y(4)n+7h5360y(5)n+O(h6)
考虑 y(xn+1)
y(xn+1)=y(xn+h)=yn+hy′n+h22!y′′n+⋯+h55!y(5)n+O(h6)
可得局部截断误差为
Rn+1=y(xn+1)−yn+1=(15!−7360)h5y(5)n+O(h6)=−h590y(5)n+O(h6)
解毕。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现