按照同样的"查说明书"方式,把 RK2 的两种常见形式拆开。你之前看到的两种 RK2(Heun 法 和 中点法)对应两张不同的布彻表


第一种:你之前图片里的 Heun 法(改进欧拉法)

你之前看到的公式:
K1=f(tn,yn)K2=f(tn+h,  yn+hK1)K=12(K1+K2)yn+1=yn+hK \begin{aligned} K_1 &= f(t_n, y_n) \\ K_2 &= f(t_n + h,\; y_n + hK_1) \\ K &= \frac{1}{2}(K_1 + K_2) \\ y_{n+1} &= y_n + hK \end{aligned} K1K2Kyn+1=f(tn,yn)=f(tn+h,yn+hK1)=21(K1+K2)=yn+hK

对应布彻表:

0001101212 \begin{array}{c|cc} \color{blue}{0} & \color{blue}{0} & 0 \\[6pt] \color{red}{1} & \color{red}{1} & 0 \\[6pt] \hline & \color{blue}{\frac{1}{2}} & \color{red}{\frac{1}{2}} \end{array} 0101210021

逐行读表

第 1 行(蓝色)K1K_1K1

位置 数字 含义
最左 0\color{blue}{0}0 时间节点:在 t+0⋅h=tnt + 0\cdot h = t_nt+0h=tn 采样
同行右 0\color{blue}{0}0 状态增量:yn+h⋅0=yny_n + h \cdot 0 = y_nyn+h0=yn(不加增量)
底行 12\color{blue}{\frac{1}{2}}21 最终权重:乘 12\frac{1}{2}21

K1=f(tn,  yn)K_1 = f(t_n,\; y_n)K1=f(tn,yn)


第 2 行(红色)K2K_2K2

位置 数字 含义
最左 1\color{red}{1}1 时间节点:在 tn+1⋅h=tn+ht_n + 1\cdot h = t_n+htn+1h=tn+h 采样
同行右 1\color{red}{1}1 状态增量:yn+h⋅1⋅K1=yn+hK1y_n + h \cdot 1\cdot K_1 = y_n + hK_1yn+h1K1=yn+hK1
底行 12\color{red}{\frac{1}{2}}21 最终权重:乘 12\frac{1}{2}21

K2=f(tn+h,  yn+hK1)K_2 = f(t_n+h,\; y_n + hK_1)K2=f(tn+h,yn+hK1)


底行横线下面 → 最终推进

yn+1=yn+h⋅(12K1+12K2)y_{n+1} = y_n + h \cdot \left(\color{blue}{\frac{1}{2}}K_1 + \color{red}{\frac{1}{2}}K_2\right)yn+1=yn+h(21K1+21K2)

这就是你图片里的 yn+1=yn+h⋅12(K1+K2)y_{n+1} = y_n + h \cdot \frac{1}{2}(K_1+K_2)yn+1=yn+h21(K1+K2)


第二种:你第一张图里的中点法(Midpoint Method)

你第一张图看到的公式:
x∗(t+12τ)=x(t)+12τf(x(t),t)x(t+τ)=x(t)+τf(x∗(t+12τ),  t+12τ) \begin{aligned} x^*(t+\tfrac{1}{2}\tau) &= x(t) + \tfrac{1}{2}\tau f(x(t),t) \\ x(t+\tau) &= x(t) + \tau f(x^*(t+\tfrac{1}{2}\tau),\; t+\tfrac{1}{2}\tau) \end{aligned} x(t+21τ)x(t+τ)=x(t)+21τf(x(t),t)=x(t)+τf(x(t+21τ),t+21τ)

对应布彻表:

0001212001 \begin{array}{c|cc} \color{blue}{0} & \color{blue}{0} & 0 \\[6pt] \color{red}{\frac{1}{2}} & \color{red}{\frac{1}{2}} & 0 \\[6pt] \hline & \color{blue}{0} & \color{red}{1} \end{array} 0210210001

逐行读表

第 1 行(蓝色)K1K_1K1

位置 数字 含义
最左 0\color{blue}{0}0 在起点 ttt 采样
同行右 0\color{blue}{0}0 状态不加增量
底行 0\color{blue}{0}0 最终权重为 0(不参与最终推进)

K1=f(t,  x)K_1 = f(t,\; x)K1=f(t,x),但算完后直接扔掉,只用来算下一步。


第 2 行(红色)K2K_2K2

位置 数字 含义
最左 12\color{red}{\frac{1}{2}}21 t+12τt+\frac{1}{2}\taut+21τ 采样
同行右 12\color{red}{\frac{1}{2}}21 状态增量:x+τ2K1x + \frac{\tau}{2}K_1x+2τK1
底行 1\color{red}{1}1 最终权重为 1(全部用它)

K2=f(t+τ2,  x+τ2K1)K_2 = f(t+\tfrac{\tau}{2},\; x + \tfrac{\tau}{2}K_1)K2=f(t+2τ,x+2τK1)


底行横线下面 → 最终推进

x(t+τ)=x(t)+τ⋅(0⋅K1+1⋅K2)=x(t)+τK2x(t+\tau) = x(t) + \tau \cdot \left(\color{blue}{0}\cdot K_1 + \color{red}{1}\cdot K_2\right) = x(t) + \tau K_2x(t+τ)=x(t)+τ(0K1+1K2)=x(t)+τK2


对比:为什么都叫 RK2,但表不同?

Heun 法 中点法
采样位置 起点 + 终点 起点 + 中点
K1K_1K1 权重 12\frac{1}{2}21 000(只当跳板)
K2K_2K2 权重 12\frac{1}{2}21 111(全权负责)
几何直觉 起点斜率和终点预估斜率取平均 只用中点斜率推进整步

两者都是 2 级(2 次求 fff)、2 阶(全局误差 O(h2)O(h^2)O(h2),所以都叫 RK2。但布彻表里的数字不同,对应不同的"采样策略"。


一句话总结读表规则

每一行 = 算一个 KiK_iKi
最左数 = 在哪个时间点采样;
同行右边数 = 状态增量由哪些前面的 KKK 加权组成;
底行对应数 = 这个 KiK_iKi 在最终推进时占多大权重。
权重为 0 = 这个 KKK 只当"跳板",不直接参与最终推进。

更多推荐