数学 - 微分方程数值解 - 第 1 章 一阶常微分方程初值问题 - 1.2 Euler 方法及其改进方法

1.2 Euler 方法及其改进方法

1.2.1 Euler 方法

f(xn,yn) 代替式 (1.2) 中的 φn,得到差分方程初值问题:

(1.2.1){yn+1=yn+hf(xn,yn)y0=y(a)n=0,1,

以上式问题的解作为微分方程初值问题的数值解,即 y(xn)=yn,称为 Euler 方法。容易看出式 (1.3) 是一个单步显式格式。

1.2.2 向后 Euler 法

f(xn+1,yn+1) 代替式 (1.2) 中的 φn,得到差分方程初值问题:

(1.2.2){yn+1=yn+hf(xn+1,yn+1)y0=y(a)n=0,1,

以上式问题的解作为微分方程初值问题的数值解,即 y(xn)=yn,称为向后 Euler 方法。容易看出式 (1.4) 是一个单步隐式格式,需要迭代法求解 yn+1。使用简单迭代法可以构造迭代格式如下:

(1.2.3){yn+1(0)=yn+hf(xn,yn)yn+1(k+1)=yn+hf(xn,yn+1(k))k=0,1,

下面考虑迭代格式 (1.5) 的收敛性,由于 f(x,y) 关于 y 满足 Lipschitz 条件,即

|f(x,y1)f(x,y2)|L|y1y2|

那么可得到迭代收敛条件:

(1.2.4)|yn+1(k+1)yn+1(k)|=h|f(xn+1,yn+1(k))f(xn+1,yn+1(k1))|hL|yn+1(k)yn+1(k1)|(hL)k|yn+1(1)yn+1(0)|

因此向后 Euler 方法迭代条件为:hL<1

1.2.3 梯形公式

考虑下列差分方程初值问题:

(1.2.5){yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]y0=y(a)n=0,1,

以上式问题的解作为微分方程初值问题的数值解,即 y(xn)=yn,称为梯形公式。容易看出式 (1.4) 是一个单步隐式格式,需要迭代法求解 yn+1。使用简单迭代法可以构造迭代格式如下:

(1.2.6){yn+1(0)=yn+hf(xn,yn)yn+1(k+1)=yn+h2[f(xn,yn)+f(xn+1,yn+1(k))]k=0,1,

下面考虑迭代格式 (1.8) 的收敛性。

(1.2.7)|yn+1(k+1)yn+1(k)|=h2|f(xn+1,yn+1(k))f(xn+1,yn+1(k1))|hL2|yn+1(k)yn+1(k1)|(hL2)k|yn+1(1)yn+1(0)|

得梯形公式的收敛条件:hL/2<1

1.2.4 改进 Euler 法

Euler 法梯形公式做一个预测 - 校正系统

(1.2.8){y¯n+1=yn+hf(xn,yn)yn+1=yn+h2[f(xn,yn)+f(xn+1,y¯n+1)]

其中,式 (1.2.8) 的第一个式子为预测,第二个式子为校正

实际计算中,改写成下式:

(1.2.9){yp=yn+hf(xn,yn)yq=yn+hf(xn+1,yp)yn+1=(yp+yq)/2n=0,1,,

1.2.5 单步法的误差估计

单步法一般形式: yn+1=yn+hφn

给出局部截断误差的定义

定义 1.2.1 局部截断误差

利用 xi(in),假定 y(x) 已知,利用公式递推一步计算 yn+1,与 y(xn+1) 的差的即为局部截断误差

Rn+1=y(xn+1)y¯n+1,其中 y¯n+1=y(xn)+hφn

给出整体截断误差的定义

定义 1.2.2 整体截断误差

利用公式从最开始 x0 一步一步递推计算 yn+1,与 y(xn+1) 的差的即为整体截断误差

en+1=y(xn+1)yn+1

给出 p 阶方法的定义:

定义 1.2.3 p 阶方法

若某种数值方法的局部截断误差 Rn+1=O(hp+1),则称该方法是 p 阶方法。若进一步满足下式

Rn+1=ψ(xn,y(xn))hp+1+O(hp+2)

则称 ψ(xn,y(xn))hp+1 为局部截断误差的主项。

(1) Euler 方法的截断误差

按局部截断误差的定义计算 Euler 方法的局部截断误差:

Rn+1=y(xn+1)y¯n+1=y(xn+1)(y(xn)+hf(xn,yn))=y(xn+1)(y(xn)+hy(xn))=y(xn)+hy(xn)+h2y(ξ)/2+o(h2)(y(xn)+hy(xn))(1.2.10)=h2y(ξ)/2+o(h2)xn<ξ<xn+1

故 Euler 方法为一阶方法。

按整体截断误差的定义计算 Euler 方法的整体截断误差:

|en+1|=|y(xn+1)yn+1||y(xn+1)y¯n+1|+|y¯n+1yn+1||Rn+1|+|y(xn)yn|+h|f(xn,y(xn))f(xn,yn)||Rn+1|+|y(xn)yn|+hL|y(xn)yn|(1.2.11)=|Rn+1|+(1+hL)|en|

我们进一步假设 f(x,y) 充分光滑,有 y(x)C(2)[a,b],则存在 M>0,使得 y(x)M,此时有 |Rk|Mh2/2。我们有 e1=R1,进一步计算整体截断误差:

|en+1|Mh2/2+(1+hL)|en|Mh2/2+(1+hL)[Mh2/2+(1+hL)|en1|]Mh2/2[1+(1+hL)+(1+hL)2++(1+hL)n]=hM2L[(1+hL)n+11]

因为 (n+1)hba,所以

(1+hL)n+1(1+hL)bah<eL(ba)

因此有

|en+1|hM2L[eL(ba)1]=O(h)

可见 Euler 方法的整体截断误差与 h 同阶,为一阶方法。且 h0 时,整体截断误差 e0

(2) 向后 Euler 方法的截断误差

按局部截断误差的定义计算向后 Euler 方法的局部截断误差:

Rn+1=y(xn+1)y¯n+1=y(xn+1)(y(xn)+hf(xn,yn))=y(xn+1)(y(xn)+hy(xn))=y(xn)+hy(xn)+h2y(xn)/2+o(h2)(y(xn)+hy(xn))(1.2.12)=h2y(xn)/2+O(h3)xn<ξ<xn+1

(3) 梯形公式的截断误差

按局部截断误差的定义计算梯形公式的局部截断误差。

考虑 y(xn+1)

y(xn+1)=y(xn)+hy(xn)+h22y(xn)+h36y(xn)+h424y(4)(ξ1)xn<ξ1<xn+1

考虑 y¯n+1

y¯n+1=y(xn)+h2(f(xn,y(xn))+f(xn+1,y(xn+1)))=y(xn)+h2(y(xn)+y(xn+1))=y(xn)+h2(y(xn)+y(xn)+hy(xn)+h22y(xn)+h36y(4)(ξ2))xn<ξ2<xn+1=y(xn)+hy(xn)+h22y(xn)+h34y(xn)+h412y(4)(ξ2)xn<ξ2<xn+1

可得梯形公式的局部截断误差:

Rn+1=y(xn+1)y¯n+1=h312y(xn)+O(h4)

posted on   Black_x  阅读(1397)  评论(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

统计

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