常微分方程初值问题的数值解法
本文参考书为马东升著《数值计算方法》
引言
未知函数为一元函数的微分方程叫常微分方程,讨论一阶常微分方程的初值问题
{ y ′ = f ( x , y ) y ( x 0 ) = y 0 \begin{cases}y'=f(x,y)\\y(x_0)=y_0\end{cases} { y′=f(x,y)y(x0)=y0
- 李普希兹条件
∣ f ( x , y 1 ) − f ( x , y 2 ) ∣ ≤ L ∣ y 1 − y 2 ∣ |f(x,y_1)-f(x,y_2)|\le L|y_1-y_2| ∣f(x,y1)−f(x,y2)∣≤L∣y1−y2∣
设 x 0 ∈ [ a , b ] x_0\in [\ a\ ,b\ ] x0∈[ a ,b ] , f ( x , y ) f(x,y) f(x,y) 对 x x x 连续且关于 y y y 满足李普希兹条件,则对所有 x ∈ [ a , b ] x\in[\ a\ ,b\ ] x∈[ a ,b ] 及任何实数 y 1 y_1 y1 和 y 2 y_2 y2 均成立,则初值问题在区间 [ a , b ] [\ a\ ,b\ ] [ a ,b ] 上有唯一解
欧拉法
欧拉公式
过 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0(x0,y0) 做曲线 y ( x ) y(x) y(x) 的切线 y ′ ( x 0 ) y'(x_0) y′(x0) 与直线 x = x 1 x=x_1 x=x1 交于 P 1 ( x 1 , y 1 ) P_1(x_1,y_1) P1(x1,y1) ,用 y 1 y_1 y1 作为 y ( x ) y(x) y(x) 上的点 y ( x 1 ) y(x_1) y(x1) 的近似值。然后过 P 1 ( x 1 , y 1 ) P_1(x_1,y_1) P1(x1,y1) 作切线,这样一直继续下去
- 欧拉公式导出
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 = x n + 1 − x n h=x_{n+1}-x_n h=xn+1−xn
例: 求解初值问题
{ y ′ = y − 2 x y , 0 < x < 1 y ( 0 ) = 1 \begin{cases} y'=y-\dfrac {2x}y\ ,\ 0<x<1\\ y(0)=1 \end{cases} ⎩⎨⎧y′=y−y2x , 0<x<1y(0)=1
解: 欧拉公式为
y n + 1 = y n + h ( y n − 2 x n y n ) y_{n+1}=y_n+h(y_n-\dfrac {2x_n}{y_n}) yn+1=yn+h(yn−yn2xn)
取步长为 h = 0.1 h=0.1 h=0.1 , n = 0 , 1 , ⋯ , 9 n=0,1,\cdots,9 n=0,1,⋯,9 时,有
n = 0 y 1 = y 0 + h ( y 0 − 2 x 0 y 0 ) = 1 + 0.1 ( 1 − 2 × 0 1 ) = 1.1 n = 1 y 2 = y 1 + h ( y 1 − 2 x 1 y 1 ) = 1.1 + 0.1 ( 1.1 − 2 × 0.1 1.1 ) ≈ 1.191818 ⋮ n=0\quad y_1=y_0+h(y_0-\dfrac {2x_0}y_0)=1+0.1(1-\dfrac {2\times 0}1)=1.1\\ n=1\quad y_2=y_1+h(y_1-\dfrac {2x_1}y_1)=1.1+0.1(1.1-\dfrac {2\times 0.1}{1.1})\approx 1.191818\\ \vdots n=0y1=y0+h(y0−y2x00)=1+0.1(1−12×0)=1.1n=1y2=y1+h(y1−y2x11)=1.1+0.1(1.1−1.12×0.1)≈1.191818⋮
-
局部截断误差和阶
设第 n n n 步是准确的, 即 y ( x n ) = y n y(x_n)=y_n y(xn)=yn ,将 y ( x n + 1 ) − y n + 1 y(x_{n+1})-y_{n+1} y(xn+1)−y