4. 步长与误差的定量关系
在自适应步长积分中,最核心的问题不是“要不要调步长”,而是“步长改变后,局部误差会按什么规律变化”。只有把这种定量关系搞清楚,步长调整才有依据,而不是凭经验拍脑袋。本节从局部截断误差的定义出发,推导步长变化对误差的影响阶数,并给出步长调整的基本公式。
局部截断误差与步长的幂次关系
考虑一阶常微分方程初值问题 y' = f(t, y),y(t₀) = y₀。设某一步从 tₙ 出发,步长为 h,数值方法给出近似值 yₙ₊₁。所谓局部截断误差,是指假设 yₙ 恰好等于精确解 y(tₙ) 时,经过一步计算后近似值与精确解之差:
τₙ₊₁ = y(tₙ₊₁) − yₙ₊₁
对 p 阶方法,局部截断误差的主项可以写成:
τₙ₊₁ = C · hp+1 · y(p+1)(ξ) + O(hp+2)
其中 C 是与方法有关的常数,ξ 位于区间 [tₙ, tₙ₊₁] 内。这个表达式说明:局部截断误差的主项与 hp+1 成正比。注意这里的阶数是 p+1,而不是 p——p 阶方法指的是全局误差为 O(hp),而单步的局部误差比全局误差高一阶。
以经典的四阶 Runge–Kutta 方法(RK4)为例,p = 4,局部截断误差主项为 O(h⁵)。若步长从 h 缩小为 h/2,局部误差主项将缩小为原来的 (1/2)⁵ = 1/32。这个“五次方”的衰减速度,正是高阶方法在步长控制上具有优势的根本原因。
从局部误差到步长调整公式
实际计算中,我们无法直接知道精确解,因此不能直接算出 τₙ₊₁。但可以利用“误差主项与 hp+1 成正比”这一结构,通过两次不同步长的计算结果来估计误差,并反推合适的步长。
设当前步长 h 产生的局部误差估计为 E(h),目标误差容限为 Tol。由于 E(h) ≈ C·hp+1,若希望新步长 h_new 满足 E(h_new) ≈ Tol,则有:
Tol / E(h) ≈ (h_new / h)p+1
两边取 1/(p+1) 次方,得到步长调整的基本依据:
h_new = h · (Tol / E(h))1/(p+1)
这个公式就是自适应步长控制的核心。它告诉我们:步长应按误差比值的 1/(p+1) 次幂缩放。对 RK4,指数为 1/5;对二阶方法,指数为 1/3。阶数越高,同样的误差超标程度只需要更温和的步长缩减,因为高阶方法的误差对步长更敏感。
误差估计的实用途径:步长加倍法
要使用上面的公式,必须先得到 E(h)。一种经典且直观的做法是步长加倍法(也称 Richardson 外推思想):用步长 h 走一步得到 y(h),再用两个 h/2 走两步得到 y(h/2)。对 p 阶方法,两者之差与局部误差同阶:
E(h) ≈ |y(h/2) − y(h)| / (2p − 1)
以 RK4 为例,分母为 2⁴ − 1 = 15。这个估计值代入步长调整公式,就能在每一步动态决定下一步该用多大步长。实际的自适应 RK 方法(如 RKF45、Dormand–Prince)采用嵌入式一对高低阶公式,用同一组函数值同时得到两个不同阶的解,其差值直接作为误差估计,效率更高,但背后的定量依据仍然是“误差主项 ∝ hp+1”。
阶数差异带来的实际影响
把不同阶方法的误差-步长关系放在一起对比,能更直观地理解“阶数”在步长控制中的意义。下表给出几种常见方法在步长减半时局部误差的缩小倍数(按主项估算):
| 方法 | 阶数 p | 局部误差主项 | 步长减半时误差缩小倍数 | 调整指数 1/(p+1) |
|---|---|---|---|---|
| 显式 Euler | 1 | O(h²) | 4 | 1/2 |
| 中点法 | 2 | O(h³) | 8 | 1/3 |
| 经典 RK4 | 4 | O(h⁵) | 32 | 1/5 |
| Dormand–Prince 5(4) | 5 | O(h⁶) | 64 | 1/6 |
从表中可以看出,低阶方法对步长变化“不敏感”,误差随步长缩小下降得慢;高阶方法则“敏感”,步长稍一缩小误差就迅速下降。这带来两个实践结论:其一,高阶方法在光滑问题上可以用大步长达到高精度,效率优势明显;其二,高阶方法的步长调整指数更小,同样的误差超标只需更小的步长缩减比例,步长变化更平缓,数值稳定性更好。
建立步长调整的基本依据
综合以上推导,自适应步长调整的逻辑可以归纳为三步:
- 估计当前步的局部误差 E(h),可用步长加倍法或嵌入式方法得到;
- 按幂次关系反推目标步长:h_new = h · (Tol / E(h))1/(p+1);
- 施加安全因子与裁剪,防止步长振荡或突变,再进入下一步计算。
需要强调的是,这个公式成立的前提是误差主项确实由 hp+1 主导,即步长处于方法的渐近收敛区。如果步长过大,高阶项不可忽略,甚至方法本身失稳,公式给出的预测就会失真。因此实际算法中还要结合稳定性限制(如对刚性问题的稳定性边界)对步长设上限。此外,误差容限 Tol 通常按绝对容限与相对容限组合设定:Tol = Atol + Rtol·|y|,以兼顾大分量和小分量的精度需求。
至此,我们已经建立了“误差估计 → 幂次反推 → 安全裁剪”的定量链条。它把“步长该调多少”从经验判断变成了可计算的公式,为后续自适应算法的具体实现(如步长接受/拒绝判据、初始步长选取、连续多步的平滑控制)提供了直接依据。