§6 常微分方程
C1 ODE求解器
d y d x = f ( x , y ) \frac{\mathrm{d}y}{\mathrm{d}x}=f(x,y) dxdy=f(x,y), f f f是矩形域 R : ∣ x − x 0 ∣ ≤ a , ∣ y − y 0 ∣ ≤ b R:|x-x_0|\le a,|y-y_0|\le b R:∣x−x0∣≤a,∣y−y0∣≤b上连续函数 式6.1.1
1)欧拉方法:从 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)开始,选定固定步长 x n + 1 − x n = h x_{n+1}-x_n=h xn+1−xn=h,得 y ^ n + 1 = y ^ n + h y ′ ( x n ) \hat y_{n+1}=\hat y_n+hy'(x_n) y^n+1=y^n+hy′(xn)
- 欧拉方法简单但精度差
2)全局截断误差
: g i = ∣ y i − y ^ i ∣ g_i = |y_i - \hat y_i| gi=∣yi−y^i∣;局部截断误差
: e i + 1 = ∣ y ^ i + 1 − z i + 1 ∣ , z e_{i+1} = |\hat y_{i+1}-z_{i+1}|,z ei+1=∣y^i+1−zi+1∣,z是以 ( x i , y ^ i ) (x_i,\hat y_i) (xi,y^i)为初值的精确解
- 定理:假设对 y y y有Lipschitz常数 L L L,则ODE求解器误差 g i ≤ C L h k ( e L ( x i − a ) − 1 ) , C , k g_i\le\frac{C}{L}h^k(e^{L(x_i-a)}-1),C,k gi≤LChk(eL(xi−a)−1),C,k是某个与界限相关的常数。若 h → 0 h\to 0 h→0时满足此式,则称求解器为 k k k阶方法
- 欧拉方法局部截断误差上界为 sup y ′ ′ 2 h 2 \frac{\sup y''}{2}h^2 2supy′′h2,可得 g i ≤ sup y ′ ′ 2 L h ( e L ( x i − a ) − 1 ) g_i\le\frac{\sup y''}{2L}h(e^{L(x_i-a)}-1) gi≤2Lsupy′′h(eL(xi−a)−1),故为一阶方法
3)显式梯形方法: x n + 1 − x n = h , y ^ n + 1 = y ^ n + h 2 ( f ( x n , y ^ n ) + f ( x n + h , y ^ n + h f ( x n , y ^ n ) ) ) x_{n+1}-x_n=h,\hat y_{n+1} = \hat y_n +\frac{h}{2}(f(x_n,\hat y_n)+f(x_n+h,\hat y_n+hf(x_n,\hat y_n))) xn+1−xn=h,y^n+1=y^n+2h(f(xn,y^n)+f(xn+h,y^n+hf(xn,y^n)))
- 注记:梯形含义为对 ∫ x n x n + 1 f ( x , y ) d x \int_{x_n}^{x_{n+1}}f(x,y)\mathrm{d}x ∫xnxn+1f(x,y)dx使用近似梯形法则
- 该方法是二阶方法
4)泰勒方法:k阶泰勒方法: x n + 1 − x n = h , y ^ n + 1 = y ^ n + ∑ i = 1 k − 1 1 i ! h i f ( i ) ( x n , y ^ n ) x_{n+1}-x_n=h,\hat y_{n+1}=\hat y_n+\sum\limits_{i=1}^{k-1}\frac{1}{i!}h^if^{(i)}(x_n,\hat y_n) xn+1−xn=h,y^n+1=y^n+i=1∑k−1i!1hif(i)(xn,y^n)
- 注记:一阶泰勒方法即欧拉方法
- f ( i ) f^{(i)} f(i)是 i i i阶全导数,需要计算
- 泰勒方法主要证明了存在任意 k k k阶近似方法,实际使用困难
5)高阶微分方程可转为一阶微分方程组进行求解
6)龙格-库塔(RK)方法:
-
中点方法:(2阶) x n + 1 − x n = h , y ^ n + 1 = y ^ n + h f ( x n + h 2 , y ^ n + h 2 f ( x n , y ^ n ) ) x_{n+1}-x_n=h,\hat y_{n+1}=\hat y_n +hf(x_n+\frac{h}{2},\hat y_n+\frac{h}{2}f(x_n,\hat y_n)) xn+1−x