当前位置:   article > 正文

计算方法-常微分方程初值问题的数值解法_隐式欧拉方程

隐式欧拉方程

常微分方程的初值问题

y ′ ( x ) = f ( x , y ) y ( x 0 ) = y 0 y'(x)=f(x,y) \\\quad\\ y(x_0)=y_0 y(x)=f(x,y)y(x0)=y0

常微分方程问题的初值解法

一、欧拉公式

y n + 1 = y n + h f ( x n , y n ) y_{n+1}=y_n+hf(x_n,y_n) yn+1=yn+hf(xn,yn)

  • h h h为步长,即 x n x_n xn x n + 1 x_{n+1} xn+1间的距离 ( x n + 1 − x n ) (x_{n+1}-x_n) (xn+1xn)
  • f ( x n , y n ) f(x_n,y_n) f(xn,yn) ( x n , y n ) (x_n,y_n) (xn,yn)点的斜率。

二、隐式欧拉公式

y n + 1 = y n + h f ( x n + 1 , y n + 1 ) y_{n+1}=y_n+hf(x_{n+1},y_{n+1}) yn+1=yn+hf(xn+1,yn+1)
即采用了后面点的斜率作为两点连线的斜率。


从上方公式可以看出,求常微分方程的初值问题的关键是:
如何选取一个合适的斜率 f ′ ( ξ ) f'(\xi) f(ξ)使得 y n + 1 y_{n+1} yn+1的值最为精确
y n + 1 = y n + ( x n + 1 − x n ) ∗ f ′ ( ξ ) , ξ ∈ ( x n , x n + 1 ) y_{n+1} = y_n + (x_{n+1}-x_n)*f'(\xi),\quad\xi\in (x_n,x_{n+1}) yn+1=yn+(xn+1xn)f(ξ),ξ(xn,xn+1)

  • 欧拉方法使用 x n x_n xn点的斜率近似
  • 隐式欧拉方法使用 x n + 1 x_{n+1} xn+1点的斜率近似

但我们如果将欧拉公式隐式欧拉公式斜率平均会不会得到更为近似的斜率呢?

为此引出梯形公式

三、梯形公式

y n + 1 = y n + h [ f ( x n , y n ) + f ( x n + 1 , y n + 1 ) ] 2 y_{n+1}=y_n+h\frac{\left[ f(x_n,y_n)+f(x_{n+1},y_{n+1})\right]}{2} yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]


但如何求解隐式公式:
如果 y ′ ( x ) = f ( x , y ) y'(x)=f(x,y) y(x)=f(x,y)中,f(x,y)只包含y的一次项 (即 f ( x , y ) f(x,y) f(x,y) y y y的线性函数)),则可显示计算。

但若不是线性函数,则需要用迭代法计算。
迭代公式:
y n + 1 0 = y n + h f ( x n , y n ) y n + 1 ( k + 1 ) = y n + h 2 [ f ( x n , y n ) + f ( x n + 1 , y n + 1 k ) ] y_{n+1}^0=y_n+hf(x_n,y_n) \\ y_{n+1}^{(k+1)} = y_n + \frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1}^k)] yn+10=yn+hf(xn,yn)yn+1(k+1)=yn+2h[f(xn,yn)+f(xn+1,yn+1k)]
上标为迭代次数,第一次迭代使用欧拉公式确定一个近似值。

改进的欧拉公式

为了编程方便,且具有较好的精确度,一般采用改进的欧拉公式。
{ T 1 = y n + h f ( x n , y n ) T 2 = y n + h f ( x n + 1 , T 1 ) y n + 1 = T 1 + T 2 2

{T1=yn+hf(xn,yn)T2=yn+hf(xn+1,T1)yn+1=T1+T22
T1=yn+hf(xn,yn)T2=yn+hf(xn+1,T1)yn+1=2T1+T2

两步欧拉公式(中点公式)

两步欧拉公式:用前两步的值作为迭代初值,用前一步的斜率作为两步间的斜率。
y n + 1 = y n − 1 + 2 h f ( x n , y n ) y_{n+1} = y_{n-1}+2hf(x_n,y_n) yn+1=yn1+2hf(xn,yn)
中点公式: y n + 1 = y n + 2 h f ( x 2 n + 1 2 , y 2 n + 1 2 ) y_{n+1} = y_{n}+2hf(x_{\frac{2n+1}{2}},y_{\frac{2n+1}{2}}) yn+1=yn+2hf(x22n+1,y22n+1)

如何判断以上方法的精度?

局部截断误差

T n + 1 = y ( x n + 1 ) − y ( x n ) − h ∗ φ ( x n , x n + 1 , y ( x n ) , y ( x n + 1 ) , h ) T_{n+1} = y(x_{n+1})-y(x_n)-h*\varphi(x_n,x_{n+1},y(x_n),y(x_{n+1}),h ) Tn+1=y(xn+1)y(xn)hφ(xn,xn+1,y(xn),y(xn+1),h)

φ ( x n , x n + 1 , y ( x n ) , y ( x n + 1 ) , h ) \varphi(x_n,x_{n+1},y(x_n),y(x_{n+1}),h ) φ(xn,xn+1,y(xn),y(xn+1),h)为各种方法中的斜率近似值函数

T n + 1 = O ( h p + 1 ) T_{n+1}=O(h^{p+1}) Tn+1=O(hp+1)则称该方法是具有p阶精度的。
h p + 1 h^{p+1} hp+1的项称为局部截断误差主项。

求解截断误差需要使用泰勒展开:
y n + 1 = y ( x n ) + h y ′ ( x n ) + h 2 2 ! y ′ ′ ( x n ) + . . . + h p p ! y ( p ) ( x n ) + O ( h p + 1 ) y_{n+1} = y(x_n) + hy'(x_n)+\frac{h^2}{2!}y''(x_n)+...+\frac{h^p}{p!}y^{(p)}(x_n)+O(h^{p+1}) yn+1=y(xn)+hy(xn)+2!h2y(xn)+...+p!hpy(p)(xn)+O(hp+1)

式中:
y ′ ′ ( x ) = f x ′ ( x , y ) + f y ′ ( x , y ) f ( x , y ) y ′ ′ ′ ( x ) = f x x + 2 f ∗ f x y + f ∗ f y y + y ′ ′ ( x ) f y y''(x) = f'_x(x,y)+f'_y(x,y)f(x,y) \\y'''(x) = f_{xx}+2f*f_{xy}+f*f_{yy}+y''(x)f_y y(x)=fx(x,y)+fy(x,y)f(x,y)y(x)=fxx+2ffxy+ffyy+y(x)fy

龙格-库塔方法(Runge-Kutta)

通过多个采样点,加权近似精度最高的斜率。
即构造方程组,使得局部截断误差达到最小。

经典四阶龙格-库塔方法

{ y n + 1 = y n + h 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 ) k 1 = f ( x , y ) k 2 = f ( x n + h 2 , y n + h 2 k 1 ) k 3 = f ( x n + h 2 , y n + h 2 k 2 ) k 4 = f ( x n + h , y + h k 3 )

{yn+1=yn+h6(k1+2k2+2k3+k4)k1=f(x,y)k2=f(xn+h2,yn+h2k1)k3=f(xn+h2,yn+h2k2)k4=f(xn+h,y+hk3)
yn+1=yn+6h(k1+2k2+2k3+k4)k1=f(x,y)k2=f(xn+2h,yn+2hk1)k3=f(xn+2h,yn+2hk2)k4=f(xn+h,y+hk3)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/814081
推荐阅读
相关标签
  

闽ICP备14008679号