Skip to content

隐式 ODE 方法与非线性步求解

Implicit ODE method · Implicit time stepping · Implicit time integration

将隐式时间步写成待求根的代数方程,并协调预测、Jacobian、线性求解、内层容差与失败回退。

形式陈述

考虑常微分方程时间步进

y(t)=f(t,y(t)),y(tn)yn.

后向 Euler 用新时刻的未知状态计算右端:

yn+1=yn+hnf(tn+1,yn+1).

因此一步并不是把已知量代入公式,而是求非线性方程

Gn(z)=zynhnf(tn+1,z)=0,yn+1=z.

这里的“隐式”描述新状态在离散方程中的依赖位置,不表示要形成任何矩阵逆,也不保证方程能被任意初值轻易解出。离散方法规定的是 Gn(z)=0;实际算法还必须规定如何选初始猜测、怎样近似求根以及求解失败时如何退出。

对后向 Euler,Newton 第 m 次内迭代求解线性系统

[IhnJf(tn+1,z(m))]δ(m)=Gn(z(m)),z(m+1)=z(m)+δ(m).

一般对角隐式 Runge–Kutta stage 可写为

Gi(Zi)=Ziξihnaiif(tn+cihn,Zi)=0,

其中 ξi 只含已经完成的 stages。它的 Jacobian 具有统一形式

JGi=IhnaiiJf.

全隐式 Runge–Kutta 会把所有 stages 联立,产生维数为 stage 数乘状态维数的块系统;BDF 则把若干历史状态放进 Gn,但“每步求一个代数方程”的结构相同。

Newton 每次更新 Jacobian 并重新分解,局部收敛快,单次迭代却可能昂贵。Chord 方法在若干内迭代甚至若干时间步内固定 Jacobian 或其分解,减少构造与分解成本,但线性模型变旧后收敛会变慢。直接不动点迭代

z(m+1)=yn+hnf(tn+1,z(m))

只有在相应映射局部收缩时才可靠;例如 fy 的 Lipschitz 常数为 L 时,hnL<1 是后向 Euler 这一迭代的简单充分条件。刚性问题恰可能让该条件迫使很小步长,所以“离散公式隐式”不等于“用固定点迭代也稳健”。

初始猜测通常由 yn、显式 Euler 或过去状态外推得到。好的预测既减少 Newton 次数,也帮助迭代落在与连续轨道相连的解支上;它不能替代残差检查。阻尼 Newton、线搜索或信赖域可以在完整 Newton 步使残差恶化时提供全局化,但接受规则必须明确,不能只把更新乘上一个随意常数。

内层求解无需追求超出外层离散精度许多的精确度。若最终近似 z~ 满足

Gn(z~)=ralg,

JGn1 在相关邻域有界,则代数状态误差一阶近似为 JGn1ralg。实际容差应经过分量尺度化,并让这项误差只占单步误差预算的一部分。容差过紧会在每步浪费非线性与线性迭代;容差过松会把代数误差注入数值轨道,甚至破坏预期阶和稳定表现。

“精确求解”是分析中把离散方程视为已求到根;“非精确求解”保留受控的非线性或线性残差;线性隐式方法则先线性化右端,每个 stage 只解形如 (IγhnJn)w=q 的系统。三者的离散映射并不相同,不能因为都调用线性求解器就视作同一种方法。

成本应分开记录函数求值、Jacobian 构造、矩阵分解、三角求解或 Krylov 迭代。对无结构稠密 d×d Jacobian,一次分解通常为 O(d3),随后每个右端的求解为 O(d2);大规模问题的成本则由稀疏结构、矩阵—向量乘和预条件决定。若步长、方法系数和 Jacobian 保持不变,同一 Newton 矩阵的分解可以直接复用;其中任何一项变化后,旧分解只能作为 chord 近似或预条件器使用,并由收敛监测决定何时更新。

一步只有在非线性残差、更新量和线性求解状态都满足尺度化标准后才能接受。若 Newton 达到迭代上限、Jacobian 近奇异、线性求解失败、残差持续增大或出现非有限值,应保留 tn,yn,报告失败原因并缩短步长或更换全局化策略;把最后一次内迭代直接当作 yn+1 会把失败伪装成时间离散误差。

直觉

显式方法从当前位置向前画一条已知的箭头,隐式方法则要求落脚点与“落脚点自己给出的箭头”相容。这个自洽条件通常没有闭式答案,所以每个时间步都包含一个小型求根问题。外层时间网格决定要走到哪些时刻,内层求解器决定每个落脚点是否真正满足离散规则。

Jacobian 描述改变候选落脚点会怎样改变自洽残差。复用 Jacobian 或分解,相当于连续几步沿用一张局部地形图;地形变化缓慢时很省成本,步长突变或非线性增强时,旧地图会让 Newton 修正失准。求解器因而需要用收敛速度决定何时更新,而不是固定地“每步重算”或“永远复用”。

例子与边界

对线性衰减测试方程

y=λy,Reλ<0,

后向 Euler 的一步只需求解

(1hλ)yn+1=yn.

这条机制及其与前向公式的刚性对照由Euler 方法页承担;本页只强调线性问题会把隐式步化成线性系统,而非线性右端才需要内层求根。即使数值模态保持衰减,放大因子与精确的 ehλ 仍可能相差很大,所以稳定表现不能替代精度检查。

这个比较也不能概括成“隐式方法无条件稳定”。后向 Euler 对标量左半平面测试方程具有特定的绝对稳定性质;其他隐式公式可能拥有不同稳定域,非正规矩阵和非线性系统还会引入标量放大因子看不到的行为。稳定结论必须带上方法、问题类、步长和所用范数。

空间离散后的扩散或反应—扩散方程常给出

Mu˙=F(t,u).

后向 Euler 的每步残差与 Jacobian 为

Gn(z)=M(zun)hnF(tn+1,z),JGn=MhnJF.

u 有数百万个分量时,真正的核心工作是保存并求解这个稀疏线性化系统,而不是写出后向 Euler 公式。预条件质量、Jacobian 更新频率和线性容差会共同决定总成本;只报告时间步数会漏掉主要工作。

非线性步方程还可能有多个根或没有位于预测邻域内的可接受根。较小步长通常让预测更接近连续解支,也让 JG 更接近单位阵或质量矩阵;但若模型本身在该处奇异,反复减步并不会自动修复问题。实现应在最小步长、最大拒绝次数或时间无法前进时终止,而不是进入无穷回退。

推论与应用

刚性解释为何稳定性可能迫使显式方法使用远小于精度所需的步长;隐式方法用更困难的每步代数求解换取不同的稳定性范围。是否值得交换,取决于 Jacobian 结构、线性求解成本、目标容差以及能否跨多个步复用计算。

可靠的隐式求解器报告应同时给接受与拒绝步数、函数和 Jacobian 求值数、非线性迭代数、线性迭代或分解数、最终尺度化残差和退出原因。这些数据能区分“时间方法需要更多步”和“内层方程难以求解”,也让外层误差控制与Newton 法的局部理论保持清楚边界。

参考资料
  • Ernst Hairer and Gerhard Wanner, Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems, 2nd rev. ed., Springer, 1996.
  • Alan C. Hindmarsh et al., “SUNDIALS: Suite of Nonlinear and Differential/Algebraic Equation Solvers,” ACM Transactions on Mathematical Software 31(3), 2005.
  • NIST Digital Library of Mathematical Functions, §3.7: Ordinary Differential Equations.