常微分方程
-
一阶常微分方程初值问题
$$ \begin{cases} y’=f(x,y) & a\leq x \leq b\newline y(x_0)=y_0 \end{cases} $$
-
存在性定理:如果 $f(x,y)$ 在带形区域 $R={(x,y)|a\leq x\leq b,-\infty<y<+\infty}$ 中连续且 $y$ 满足 Lipschitz 条件,则初值问题存在唯一的连续可微解
-
基本解法:差商代替导数
-
局部阶段误差:第 n 步为准确解的情况下,用数值方法计算 $y_{n+1}$ 时的误差 $y(x_{n+1})-y_{n+1}$
-
整体阶段误差:无舍入误差情况下,$y(x_n)-y_n$,通常比局部截断误差低一阶
-
数值方法的解 $p$:整体阶段误差 $O(h^p)$
Euler 方法(差分方法)
- Euler 方法
- 步长 $h$
- $x_n=x_0+nh$
- $y_{n+1}=y_n+hf(x_n,y_n)$
- 局部阶段误差:$O(h^2)$
- 后退 Euler 方法
- 2 步 Euler 方法
- $y(x_{n+1})=y(x_{n-1})+2hf(x_n,y_n(x_n))$
- 局部截断误差:$\frac{h^3}{3}y’’’(\xi)$
Taylor 展开法
- $y_{n+1}=y_n+h\Phi(x_n,y_n,h)$
- 增量函数:$\Phi(x_n,y_n,h)$
- $y(x+h)=y(x)+h(f(x,y(x)))+\frac{1}{2!h^2}f’(x,y(x))+\cdots+\frac{1}{p!}h^pf^{(p-1)}(x,y(x))+R_n=y(x)+h\Phi(x,y,h)+R_n$
- 局部截断误差:$R_n$
- $p=1:\Phi =f(x_n,y_n),R_n=O(h^2)$
- $p=2:\Phi =f(x_n,y_n)+\frac{h}{2}f’(x_n,y_n)=f(x_n,y_n)+f’_x(x_n,y_n)+f’_y(x_n,y_n)f(x_n,y_n),R_n=O(h^3)$
数值积分法
- 两边求定积分:$y(x_{n+1})=y(x_n)+\int_{x_n}^{x_{n+1}}f(x,y(x))dx$
- 矩形公式:$y_{n+1}=y_n+hf(x_n,y_n)$ (Euler 方法)
- 梯形公式:$y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1})]$
- 局部阶段误差:$R_n=O(h^3)$
- 隐式方法:迭代解法 $y_{n+1}^{(k+1)}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1}^k)],|y_{n+1}^{(k+1)}-y_{n+1}^{(k)}|<\epsilon$ 则停止
- 改进 Euler 方法
- $y_{n+1}^{(0)}=y_n+hf(x_n,y_n)$
- $y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1})]$
- $y_0=\eta$
- 改进 Euler 方法
- $y_{n+1}=y_n+\frac{h}{2}(f(x_n,y_n)+f(x_n+h,y_n+hf(x_n,y_n)))$
Runge-Kutta 方法
- $\exists \theta\in(0,1),\frac{y(x_{n+1}-y(x_n))}{h}=y’(x_n+\theta h)$
- $y(x_{n+1})=y(x_n)+hf(x_n+\theta h,y(x_n+\theta h))$
- $[x_n,x_{n+1}]$ 平均斜率:$K^*=f(x_n+\theta h,y(x_n+\theta h))$
- 2 阶 Runge-Kutta:
- $y_{n+1}=y_n+h(\lambda_1 K_1,\lambda_2 K_2)$
- $K_1=f(x_n,y_n)$
- $K_2=f(x_{n+p},y_n+phK_1)$
- $\lambda_1,\lambda_2,p$ 待定
- $\lambda_1=1-\frac{1}{2p}$
- $\lambda_2=\frac{1}{2p}$
- $p=1$: 改进的 Euler 算法
- $p=\frac{1}{2}$: 变形的 Euler 算法
- $p=\frac{2}{3}$: Heun 方法
- 3 阶 Runge-Kutta 方法
- Kutta 方法
- 三阶 Heun 方法
- 4 阶 Runge-Kutta 方法
- 经典的 Runge-Kutta 方法,局部截断误差 $O(h^5)$
- 变步长的 Runge-Kutta 方法:通过步长加倍选择步长
线性多步法
- Adams 方法:用 $y_{n},y_{n-1},\dots$ 构造 $P_k(x)$ 外推计算 $y_{n+1}$
- $P_k(x)$:Newton 后差插值多项式
- $f_m=f(x_m,y_m)$
- Adams 显示公式:$y_{n+1}=y_n+h\sum_{m=0}^k\alpha_m\nabla^mf_n$
- $k=1$: $y_{n+1}=y_n+\frac{h}{2}(3f_n-f_{n-1})$
- $k=3$: $y_{n+1}=y_n+\frac{h}{24}(55f_n-59f_{n-1}+37f_{n-2}-9f_{n-3})$
- 需要用其它方法求出前几个值
- $k$ 步具有 $k$ 阶精度
- Adams 隐式公式
- $k=1$: $y_{n+1}=y_n+\frac{h}{2}(f_{n+1}+f_n)$
- $k=2$: $y_{n+1}=y_n+\frac{h}{12}(5f_{n+1}+8f_n-f_{n-1})$
- $k$ 步具有 $k+1$ 阶精度