常微分方程

  • 一阶常微分方程初值问题

    $$ \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$ 阶精度