ODE的数值解法
一、常微分方程(ODE)基础概念
ODE定义
- $g(t, y, y', \cdots, y^{(k)}) = 0$,其中 $y = y(t)$ 是未知函数。
- k阶显式ODE:$y^{(k)} = f(t, y, y', \cdots, y^{(k-1)})$。
高阶ODE化一阶方程组
- 变量代换:设 $u_1 = y, u_2 = y', \cdots, u_k = y^{(k-1)}$。
$$ \begin{cases} u_1' = u_2 \\ u_2' = u_3 \\ \vdots \\ u_k' = f(t, u_1, \dots, u_k) \end{cases} $$ - 例(牛顿第二定律):
$$ my'' = F(t, y, y') \rightarrow \begin{cases} u_1' = u_2 \\ u_2' = \frac{1}{m} F(t, u_1, u_2) \end{cases} $$
- 变量代换:设 $u_1 = y, u_2 = y', \cdots, u_k = y^{(k-1)}$。
初值问题(IVP)
$
y' = f(t, y), \quad y(t_0) = y_0, \quad t \geq t_0
$- 解的唯一性由初始条件保证。
稳定性分类(定义8.1)
- 稳定:初值扰动 $\delta$ 导致解偏差 $\Delta y(t)$ 有界。
- 渐近稳定:$\lim_{t \to \infty} \Delta y(t) = 0$。
- 不稳定:$\Delta y(t) \to \infty$。
- 模型问题分析:$y' = \lambda y$,解 $y(t) = y_0 e^{\lambda(t-t_0)}$。
- 稳定当 $\operatorname{Re}(\lambda) \leq 0$;渐近稳定当 $\operatorname{Re}(\lambda) < 0$。
- 非线性问题局部稳定性:
- 雅可比矩阵 $J = \frac{\partial f}{\partial y}$,特征值 $\lambda_k$ 满足 $\operatorname{Re}(\lambda_k) \leq 0$ 则局部稳定。
二、数值解法基本概念
离散变量法
- 步进计算:$t_0 < t_1 < \cdots < t_n$,步长 $h_n = t_{n+1} - t_n$。
- 近似解序列 $y_0, y_1, \dots, y_n$。
方法分类
类型 公式形式 特点 单步法 $y_{n+1} = G(y_n)$ 仅依赖前一步 多步法(k步) $y_{n+1} = G(y_n, \dots, y_{n-k})$ 依赖前k步 显式 $y_{n+1}$ 不隐式出现 直接计算 隐式 $y_{n+1}$ 出现在方程中 需迭代求解(如牛顿法) 局部截断误差(LTE)(定义8.3)
- 假设 $y_{n-i} = y(t_{n-i})$ 精确,则 $l_{n+1} = y(t_{n+1}) - y_{n+1}$。
- p阶精度:$l_{n+1} = O(h^{p+1})$。
整体误差
- $e_n = y_n - y(t_n)$。
- 定理:若方法稳定且局部截断误差 $O(h^{p+1})$,则整体误差 $e_n = O(h^p)$。
三、单步法数值解法
1. 欧拉法(显式)
- 公式:$y_{n+1} = y_n + h f(t_n, y_n)$。
- 推导:
- 数值微分(向前差分):$y'(t_n) \approx \frac{y(t_{n+1}) - y(t_n)}{h}$。
- 数值积分(左矩形):$\int_{t_n}^{t_{n+1}} f ds \approx h f(t_n, y(t_n))$。
- 精度:$l_{n+1} = O(h^2)$ → 1阶精度。
- 稳定性分析(模型问题 $y' = \lambda y$):
- 递推式:$y_{n+1} = (1 + h\lambda) y_n$。
- 稳定条件:$|1 + h\lambda| \leq 1$。
- 稳定区域:复平面中 $h\lambda$ 在圆盘 $|z+1| \leq 1$ 内(见Page 15图示)。
2. 向后欧拉法(隐式)
- 公式:$y_{n+1} = y_n + h f(t_{n+1}, y_{n+1})$。
- 稳定性(模型问题):
- $y_{n+1} = \frac{1}{1 - h\lambda} y_n$,稳定条件 $\left| \frac{1}{1 - h\lambda} \right| \leq 1$ 恒成立($\operatorname{Re}(\lambda) \leq 0$ 时)。
→ 无条件稳定(A-stable)。
- $y_{n+1} = \frac{1}{1 - h\lambda} y_n$,稳定条件 $\left| \frac{1}{1 - h\lambda} \right| \leq 1$ 恒成立($\operatorname{Re}(\lambda) \leq 0$ 时)。
- 精度:$l_{n+1} = O(h^2)$ → 1阶精度(推导见Page 22)。
3. 梯形法(隐式)
- 公式:$y_{n+1} = y_n + \frac{h}{2} \left[ f(t_n, y_n) + f(t_{n+1}, y_{n+1}) \right]$。
- 稳定性(模型问题):
- $y_{n+1} = \frac{2 + h\lambda}{2 - h\lambda} y_n$,稳定当 $\operatorname{Re}(h\lambda) \leq 0$ → 无条件稳定。
- 精度:$l_{n+1} = O(h^3)$ → 2阶精度。
四、Runge-Kutta(R-K)方法
1. 显式R-K公式
- 一般形式:
$$ y_{n+1} = y_n + h \sum_{i=1}^{r} c_i k_i, \quad \begin{cases} k_1 = f(t_n, y_n) \\ k_i = f\left( t_n + \lambda_i h, y_n + h \sum_{j=1}^{i-1} \mu_{ij} k_j \right) \end{cases} $$ - 参数确定:通过泰勒展开匹配精度阶(例:2级R-K见Page 29)。
2. 常用公式
- 改进欧拉法(2级2阶):
$$ \begin{cases} k_1 = f(t_n, y_n) \\ k_2 = f(t_n + h, y_n + h k_1) \\ y_{n+1} = y_n + \frac{h}{2} (k_1 + k_2) \end{cases} $$ - 经典4级4阶R-K:
$$ \begin{cases} k_1 = f(t_n, y_n) \\ k_2 = f(t_n + \frac{h}{2}, y_n + \frac{h}{2} k_1) \\ k_3 = f(t_n + \frac{h}{2}, y_n + \frac{h}{2} k_2) \\ k_4 = f(t_n + h, y_n + h k_3) \\ y_{n+1} = y_n + \frac{h}{6} (k_1 + 2k_2 + 2k_3 + k_4) \end{cases} $$ - 精度与稳定性:
- r级显式R-K最高阶数:r(当 $r \leq 4$ 时)。
- 稳定区域:模型问题下 $|\phi(h\lambda)| \leq 1$(例:2阶R-K要求 $h \leq -2/\lambda$)。
五、多步法
1. 线性多步法公式
$$ y_{n+1} = \sum_{i=1}^{m} \alpha_i y_{n+1-i} + h \sum_{i=0}^{m} \beta_i f(t_{n+1-i}, y_{n+1-i}) $$
- 显式:$\beta_0 = 0$;隐式:$\beta_0 \neq 0$。
2. 系数确定方法
- 泰勒展开法:
- 将 $y(t_{n+1})$ 在 $t_{n+1}$ 泰勒展开,匹配系数使低阶项为零。
- 相容性条件(1阶精度):
$
\sum \alpha_i = 1, \quad \sum i \alpha_i = \sum \beta_i
$
- 单项式代入法:
- 令 $y(t) = t^k$($k=0,1,\dots,p$)代入公式,解方程组。
3. 常用多步法
| 类型 | 公式 | 阶数 | 稳定阈值 |
|---|---|---|---|
| Adams显式 | $y_{n+1} = y_n + \frac{h}{24} (55f_n - 59f_{n-1} + 37f_{n-2} - 9f_{n-3})$ | 4 | $-3/10$ |
| Adams隐式 | $y_{n+1} = y_n + \frac{h}{24} (9f_{n+1} + 19f_n - 5f_{n-1} + f_{n-2})$ | 4 | $-3$ |
| BDF隐式 | $y_{n+1} = \sum \alpha_i y_{n+1-i} + h \beta_0 f_{n+1}$ | 变阶 | 大稳定区域 |
- 定理8.4:m步Adams法,显式阶数 $m$,隐式阶数 $m+1$。
- 启动问题:需用单步法计算前 $m$ 步。
六、稳定性与收敛性
1. 数值稳定性定义(定义8.2)
- 扰动 $\delta_n$ 引起的后续误差 $|\delta_m| \leq |\delta_n|$。
2. 收敛性条件
- 单步法:若满足相容性 $\varphi(t,y,0) = f(t,y)$ 且 Lipschitz 连续,则收敛。
- 多步法:需满足根条件(特征多项式根 $|r_i| \leq 1$ 且模1根为单根)。
3. 刚性(Stiff)问题
- 特征:解变化缓慢,但附近解变化快($\operatorname{Re}(\lambda_k) \ll 0$)。
- 适用方法:隐式法(如向后欧拉、BDF)。
示例:双联摆问题。
$$
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 2 & \cos(\Delta u) \\
0 & 0 & \cos(\Delta u) & 1
\end{bmatrix}
\mathbf{u}' =
\begin{bmatrix}
u_3 \\
u_4 \\
-2g \sin u_1 - \sin(\Delta u) u_4^2 \\
-g \sin u_2 + \sin(\Delta u) u_3^2
\end{bmatrix}, \quad \Delta u = u_1 - u_2
$$
ODE的数值解法
https://blog.xiaoaojianghu.fun/posts/5160c0e9.html