Skip to content

算法Algorithm

自适应步长与嵌入式 Runge–Kutta

施工中 · 内容逐步修订

Adaptive Runge-Kutta step size · Embedded Runge-Kutta method · Adaptive Runge-Kutta

用共享 stages 的嵌入式 Runge–Kutta 对估计单步误差,并通过尺度化接受、拒绝与受限控制器分配时间步。

形式陈述 ​

嵌入对与局部误差估计 ​

嵌入式Runge–Kutta对在同一步内共享 stages

ki=f(tn+cihn,yn+hn∑j=1saijkj),i=1,…,s,

再用两组权重形成不同阶的候选值:

yn+1[p]=yn+hn∑i=1sbiki,yn+1[q]=yn+hn∑i=1sb^iki.

以下约定整数 p>q≥1,通常 q=p−1;若文献按“低阶/高阶”写成 p/(p+1),只需交换阶数标签,控制器仍应使用估计量真正的局部幂次。两式之差

en+1=yn+1[p]−yn+1[q]=hn∑i=1s(bi−b^i)ki

不是真解误差本身,而是在光滑性和嵌入对设计成立时对本步局部误差尺度的廉价估计。共享 stages 使估计器只增加少量向量组合,而不是把整步再算一次。

尺度化验收 ​

取状态维数 d≥1。不同分量可能有不同单位和量级;要求 atoli>0、rtoli≥0,以保证下面各尺度为正。对第 i 个状态分量,先定义混合尺度

sci=atoli+rtolimax(|yn,i|,|yn+1,i[p]|),

再计算例如加权均方范数

En+1=[1d∑i=1d|en+1,isci|2]1/2.

也可以约定加权最大范数,但接口必须说明选择。rtoli 控制大幅值分量的相对尺度,atoli 在分量接近或穿过零时提供非零基准;只给单一绝对容差会过度约束大分量,只给相对容差则可能在零附近要求无法实现的精度。

若 En+1≤1,本步通过当前的局部接受规则,求解器推进到 tn+1=tn+hn 并保存约定的高阶候选值。若 En+1>1,时间和状态仍保持在 tn,yn,缩短步长后重试。拒绝步不是轨道的一部分,但其函数求值和失败原因必须计入成本。

步长控制器 ​

设嵌入差的主导尺度为 E≈Chr。比例控制器据此提出

hnew=hnclip(fmin,θE−1/r,fmax),

其中 0<θ<1 是安全因子,0<fmin<1<fmax<∞ 限制一次缩放幅度。若一对方法的阶为 p 与 p−1,差值通常具有 r=p 的局部幂次;其他嵌入设计应使用自身估计器的幂次,不能只看到“高阶为 p”就机械套指数。

当 E 极小或舍入成零时,应使用 Esafe=max(E,Efloor) 或直接采用受限的最大增长因子,避免除零和一步暴涨。最终到达终点时还要把候选步长截到剩余区间,并检查浮点加法是否真的满足 tn+hn>tn。

纯比例控制会对相邻误差的噪声作出剧烈反应。PI 控制器把当前与上一接受步的估计结合,例如按

hnewhn=θEn+1−α/rEnβ/r

再施加上下界,其中 α,β 由所用方法和控制器调校。它的作用是平滑步长序列,不是把局部估计升级为全局误差证明。拒绝后的控制通常应更保守,也不能使用尚未接受的状态更新历史。

拒步、缓存与退出 ​

重试时,所有依赖新步长或新 stage 状态的 ki 都必须重算。具有 first-same-as-last 性质的嵌入对,在一步成功接受且端点条件匹配时可以把末 stage 导数复用为下一步首 stage;这是一项有前提的缓存优化,不改变接受准则,也不能让旧步长下的中间 stages 在拒绝后继续生效。

完整输入包括 f,t0,y0,T、初始步长、逐分量或可广播的 atol,rtol、最大与最小步长以及工作预算。输出至少应给实际网格、接受和拒绝步数、函数求值数、最后的 E、事件或终点状态与退出原因。若连续拒绝、导数或估计非有限、所需步长低于下限,或 tn+hn=tn,应明确失败,不能通过强行接受超容差步骤制造“完成”。

直觉

嵌入对像用同一组观测点画两条精细程度略有不同的短轨道。两条轨道靠得近,说明当前局部形状在这个尺度下容易解析;差得远,则提示这一步跨过了过多曲率或快速变化。控制器把这项局部反馈转成下一步的长度,使计算工作随轨道难度分布。

绝对与相对容差共同定义“差多少才重要”。温度与浓度若量纲不同,直接比较原始误差没有意义;逐分量尺度先把误差换成无量纲比例,再由范数汇总。这个尺度是用户对数值状态的精度约定,不是算法从方程中自动推断出的物理重要性。

嵌入式 RK 的误差控制回路
例子与边界

局部尖峰中的步长分配 ​

取 0<ε≪1,令

y′(t)=εε2+(t−12)2,y(0)=arctan(−12ε).

精确解为

y(t)=arctan(t−12ε).

远离 t=12 时,导数只有 O(ε);在宽度约为 O(ε) 的过渡区内,斜率峰值达到 1/ε。嵌入式控制器会在两端平缓区逐步放大 hn,进入过渡区前后因 E 增大而缩步,离开后再恢复较长步。固定使用过渡区所需的最小步长会把大部分函数求值浪费在平缓区。

局部估计器的盲区 ​

这幅图像不表示控制器一定提前“看见”尖锐变化。若一步的所有 stage 都跨过一个非常窄的特征,两套共享-stage 公式可能同时漏掉它,差值也可能偶然相消。最大步长限制、问题特定的采样要求或事件检测仍有价值;误差估计器不是对未采样区间的全知探测器。

局部接受也不保证全局真值。每个 En+1≤1 只说明嵌入估计在当前尺度下通过,误差随后还会被动力系统传播和累积。长时间振荡的相位、守恒量、混沌轨道以及零点事件的位置,都可能在每步局部估计合格时仍产生明显偏差。容差通常控制工作—精度折中,而不是给终点全局误差提供严格上界。

Dormand–Prince 5(4) 是共享 stages、局部外推和 FSAL 配合的典型显式嵌入对,但它仍受显式稳定域限制。对刚性问题,控制器可能为了稳定性而持续缩步,即使局部平滑度看似允许更大步;这时换用合适的隐式方法比继续压低显式步长更有效。

推论与应用

自适应算法把估计量与真实误差的区别带入时间积分:可计算的嵌入差驱动局部决策,独立参考解、步长加密实验或问题结构才用于验证全局结果。报告容差而不报告实际网格、拒绝次数和函数求值数,无法判断控制器把工作花在了哪里。

事件检测通常在已接受步的连续插值上定位符号变化。减小局部状态误差有助于事件定位,却不自动规定插值阶、漏检多个事件的防护或终止方向。密集输出、事件误差和状态步长控制应共享已算 stages,但保留各自的验收标准。

参考资料
  • Ernst Hairer, Syvert P. Nørsett, and Gerhard Wanner, Solving Ordinary Differential Equations I: Nonstiff Problems, 2nd rev. ed., Springer, 1993.
  • J. R. Dormand and P. J. Prince, “A Family of Embedded Runge-Kutta Formulae,” Journal of Computational and Applied Mathematics 6(1), 1980.
  • SciPy documentation, Integration and ODEs: solve_ivp, accessed 2026.
关系图谱6 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系