欢迎光临散文网 会员登陆 & 注册

五种欧拉法求解一阶常微分方程(MATLAB)

2022-04-10 15:19 作者:鸣凤在竹-白驹食场  | 我要投稿

1. 欧拉法

由拉格郎日中值定理,在区间(x_%7Bk-1%7D%2Cx_%7Bk%7D)内必定存在%5Cxi%20_%7Bk%7D,使得:

y(x_%7Bk%7D)-y(x_%7Bk-1%7D)%3Dy'(%5Cxi%20_%7Bk%7D)(x_%7Bk%7D-x_%7Bk-1%7D)

所以y(x_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2Bhy'(%5Cxi%20_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2Bhf(%5Cxi%20_%7Bk%7D%2C%20y(%5Cxi%20_%7Bk%7D))。如果知道%5Cxi%20_%7Bk%7D,代入这个递推公式,那么递推过程得到的序列y_%7B0%7D%2C%20y_%7B1%7D%2C%20y_%7B2%7D%2C%20...,没有误差。但求%5Cxi%20_%7Bk%7D往往很困难,常用一个易求的值近似地代替%5Cxi%20_%7Bk%7D。显式欧拉法、隐式欧拉法、梯形公式法、中点欧拉方法的区别是对%5Cxi%20_%7Bk%7Dy'(%5Cxi%20_%7Bk%7D)的近似方法不同。

(1)显式欧拉法

显式欧拉法把%5Cxi%20_%7Bk%7D近似为区间%5Bx_%7Bk-1%7D%2Cx_%7Bk%7D%5D的起点,即

y(x_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2Bhf(x%20_%7Bk-1%7D%2C%20y(x_%7Bk-1%7D))%EF%BC%8Ck%3D1%2C2%2C...

显式欧拉法是单步法,每一轮递推只用到前面一轮递推的结果。欧拉公式具有明显的几何意义,就是用折线近似代替方程的解曲线,因而常称为欧拉折线法。由泰勒展开式可知显式欧拉法具有1阶精度。

显式欧拉法在步长过大时误差较大;在步长较小时需要多步递推,可能出现误差累积的现象。由于显式欧拉法的精度不高,因此在实际应用中用的较少。

(2)隐式欧拉法

隐式欧拉法把%5Cxi%20_%7Bk%7D近似为区间%5Bx_%7Bk-1%7D%2Cx_%7Bk%7D%5D的终点,即

y(x_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2Bhf(x%20_%7Bk%7D%2C%20y(x_%7Bk%7D))%EF%BC%8Ck%3D1%2C2%2C...

隐式欧拉法是隐式方法,递推公式的右端包含未知量y_%7Bk%7D,故隐式欧拉法需要求解方程,得出y_%7Bk%7D

为避免求解方程,常用显式欧拉法的计算结果作为迭代的初值y_%7Bk%7D%5E%7B(0)%7D,把隐式欧拉法的递推公式作为迭代公式反复迭代,得到迭代序列y_%7Bk%7D%5E%7B(0)%7D%2C%20y_%7Bk%7D%5E%7B(1)%7D%2C%20y_%7Bk%7D%5E%7B(2)%7D%2C%20...。如果步长h足够小,那么迭代序列收敛于y_%7Bk%7D

y(x%5E%7B(i)%7D_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2Bhf(x%20_%7Bk%7D%2C%20y(x%5E%7Bi-1%7D_%7Bk%7D))%EF%BC%8Ck%3D1%2C2%2C...

隐式欧拉法具有1阶精度。

(3)梯形公式法

梯形公式法把y'(%5Cxi%20_%7Bk%7D)近似为区间%5Bx_%7Bk-1%7D%2Cx_%7Bk%7D%5D的起点和终点导数的平均值。递推公式为:

y(x_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2B%5Cfrac%7Bh%7D%7B2%7D%20(f(x%20_%7Bk-1%7D%2C%20y(x_%7Bk-1%7D))%2Bf(x%20_%7Bk%7D%2C%20y(x_%7Bk%7D)))%EF%BC%8Ck%3D1%2C2%2C...

显然,梯形公式法是隐式方法,需要求解方程。为避免解方程,常用显式欧拉法的计算结果作为迭代的初值y_%7Bk%7D%5E%7B(0)%7D,把梯形公式法的递推公式作为迭代公式反复迭代,得到迭代序列y_%7Bk%7D%5E%7B(0)%7D%2C%20y_%7Bk%7D%5E%7B(1)%7D%2C%20y_%7Bk%7D%5E%7B(2)%7D%2C%20...。如果步长h足够小,那么迭代序列收敛于y_%7Bk%7D

y(x%5E%7B(i)%7D_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2B%5Cfrac%7Bh%7D%7B2%7D%20(f(x%20_%7Bk-1%7D%2C%20y(x_%7Bk-1%7D))%2Bf(x%20_%7Bk%7D%2C%20y(x%5E%7Bi-1%7D_%7Bk%7D)))%EF%BC%8Ck%3D1%2C2%2C...

梯形公式法具有2阶精度。

(4)中点欧拉法

中点欧拉法把%5Cxi%20_%7Bk%7D近似为区间%5Bx_%7Bk-1%7D%2Cx_%7Bk%2B1%7D%5D的中点x_%7Bk%7D,即

y(x_%7Bk%2B1%7D)%3Dy(x_%7Bk-1%7D)%2B2hf(x%20_%7Bk%7D%2C%20y(x_%7Bk%7D))%EF%BC%8Ck%3D1%2C2%2C...

中点欧拉方法是双步法,需要2个初值y_%7B0%7Dy_%7B1%7D才能启动递推过程。一般先用单步法由点(x_%7B0%7D%2Cy_%7B0%7D)计算出(x_%7B1%7D%2Cy_%7B1%7D),再用中点欧拉方法反复地递推。

中点欧拉方法具有2阶精度。

(5)改进的欧拉法

改进的欧拉法是一种预测—校正方法,它的每一轮递推包括预测和校正这2个步骤:

(1)先用显式欧拉公式计算出y_%7Bk%7D%5E*%20y%5E%7B*%7D_%7Bk%7D%3Dy(x_%7Bk-1%7D)%2Bhf(x%20_%7Bk-1%7D%2C%20y(x_%7Bk-1%7D)),即预测;

(2)再用梯形公式迭代一次y(x_%7Bk%7D)%3Dy(x_%7Bk-1%7D)%2B%5Cfrac%7Bh%7D%7B2%7D%20(f(x%20_%7Bk-1%7D%2C%20y(x_%7Bk-1%7D))%2Bf(x%20_%7Bk%7D%2C%20y%5E%7B*%7D_%7Bk%7D)),即校正。

改进的欧拉法精度比显式欧拉法高,不需要解方程,是一种更实用的方法。

2. 欧拉法MATLAB算法实现

如下算法实现五种形式的欧拉法,根据用户选择ode_method的方法,采用不同的欧拉法求解。


3. 欧拉法算法测试

1:采用五种欧拉法求解一阶微分方程,已知解析解为y%3D%5Csqrt%7B1%2B2x%7D%20

y'%3Dy-%5Cfrac%7B2x%7D%7By%7D%20%EF%BC%8C%20y(0)%3D1%EF%BC%8Cx%5Cin%20%5B0%2C1%5D

测试代码如下:

测试结果:输出参数为结构体,如显式欧拉法的输出结果:

可视化图像如图1和图2所示,可见较小的步长可获得较高的精度,但注意计算时的舍入误差和误差累积。

图1 步长为0.05时的欧拉法数值解曲线与误差曲线
图2 步长为0.001时的欧拉法数值解曲线与误差曲线





五种欧拉法求解一阶常微分方程(MATLAB)的评论 (共 条)

分享到微博请遵守国家法律