“后向 Euler 的 $R(z)=1/(1 z)$ 会把很负的实特征值强烈压小。梯形法的 $R(z)=(1+z/2)/(1 z/2)$ 虽然在整个左半平面满足 $ R \le1$,但 $z\…”
显式时间方法用已经知道的量直接算出下一步;隐式方法则把下一步的未知状态放进方程,再求出满足这个方程的值。它用每步求解一个代数问题的成本,换取不同的稳定性、阻尼或结构性质。
因此,隐式方法有两个不能混淆的层次:时间离散公式决定理想的一步应该是什么;非线性与线性求解器负责把这一步算出来。时间公式正确,不代表随便做几次迭代就已实现了它。
形式陈述
把一步写成求根问题
以下以实向量状态为例;复状态可拆成实部与虚部。对初值问题
后向 Euler 使用下一时刻的斜率:
将未知的
若
“隐式”并不等于“一定需要非线性迭代”,它描述的是未知量在时间公式中的位置。
梯形法把两端斜率平均:
它的一步残差同样可以写成
直觉
Newton 迭代与线性求解的接口
对于向量状态,后向 Euler 的 Jacobian 为
第
这里通常应解线性系统,而不是显式形成矩阵逆。若
完整 Newton在每轮更新 Jacobian;简化 Newton在若干轮或若干步内复用近似矩阵。复用减少组装和分解成本,但状态或步长变化较大时,旧矩阵可能不再有效。以收敛速度和失败情况决定何时更新,比固定宣称“每步复用一定更快”更合理。[1]
不精确 Newton 允许内层线性系统只近似求解。远离根时,外层误差很大,没有必要把线性残差压得极低;接近根时,再提高线性求解精度。这样让内外误差处在匹配尺度上,而不是把某一层过度求解。
不动点迭代为什么可能失败
最直接的迭代是
若
在线性衰减
补充示意图
例子与边界
一个能完整算出来的非线性步
考虑
代数方程有两个根
另一个负根并不是这条衰减轨道的小步延续。隐式方程在非线性情况下可能存在多个根,因此“残差为零”还应与所跟踪的解支一致。良好预测值和适当步长在这里不仅影响速度,也帮助定位正确解支。
使用 Newton 法,
前三次更新为
几次迭代后已经非常接近这个后向 Euler 步的精确根。可是原 ODE 在时间
这个例子把三件事清楚分开了:原微分方程的解、隐式离散方程的解,以及当前迭代值。继续迭代只会消除后两者之间的差,不会把一阶时间格式变成精确积分。
残差多小才算这一步解好了
设理想离散根为
所以残差
对
绝对容差处理接近零的量,相对容差处理随状态尺度变化的量。这是一种常用形式;具体求解器可能采用当前解或预测值构造权重,应以实现约定为准。Newton 修正量、非线性残差与外层局部误差估计也不是同一个数,不能随意共用未经缩放的阈值。[3]
为什么不能永远使用固定绝对残差
考虑最简单的方程
那么
在具有稳定传播和适当逆 Jacobian 控制的情形,若一个
求根收敛和局部时间误差合格是两道不同检查;外层误差过大时,已经收敛的候选步仍可能被拒绝。
推论与应用
A 稳定与 L 稳定分别解决什么
用测试方程
当
梯形法的稳定函数为
它也是 A 稳定,但
这并不说明梯形法普遍较差:在所需时间尺度被充分解析时,它具有二阶精度,而后向 Euler 只有一阶。比较的重点是,当前任务需要多少阻尼、是否存在未解析的刚性瞬态,以及时间误差目标是什么。[2]
隐式方法也并非全部 A 稳定。不同 Runge–Kutta 或多步公式有不同稳定域;例如 BDF 族的高阶成员并不都具有整个左半平面的稳定性。因此选择时间方法仍需查看其具体稳定函数或稳定区域,不能把“隐式”当作一个通用稳定性证明。
一步的接受,包含两道检查
一个实用隐式积分步通常先用旧解、外推或较便宜公式产生预测值,再用 Newton 或其他方法求解代数方程。只有非线性迭代达到要求,才获得一个足够准确的候选时间步。
但候选步还要通过外层局部时间误差测试。非线性方程解得很准,只说明实现了这一步公式;若时间步过大,公式本身的截断误差仍会超标。自适应算法可能因此拒绝一个 Newton 已经收敛的步,并缩小
若 Newton 不收敛,可以更新 Jacobian、改善预测值或采用阻尼;必要时也会缩小时间步。缩步同时改变隐式方程和线性系统,往往改善局部可解性与迭代条件。接受后再根据局部误差估计调整下一步,而不是根据 Newton 轮数单独决定精度是否合格。
对具有多个物理时间尺度的问题,这样的内外两层控制是隐式积分器的重要组成部分。只给出后向 Euler 的公式,却不说明如何解根、怎样判断收敛、何时拒步,仍不足以构成一个可靠的通用算法。
更一般的隐式结构
对质量矩阵系统
若
微分代数系统把“即时残差为零”与“确有轨道通过该状态”分开。可逆代数偏导块允许用隐函数约化,再以Schur补解释后向Euler的邻近分支;正则常系数DAE还给出每步矩阵可逆、错误初值却产生随缩步放大尖峰的精确例子。因此本页的隐式求解成功记录仍应另外核验约束和初始相容性。
隐式 Runge–Kutta 方法把若干阶段量作为未知数。对角隐式方法可以按阶段顺序求解;全隐式方法一般形成耦合块系统。BDF 等多步法则使用历史状态构造单个新状态方程,同时需要启动过程和变步长历史管理。这些方法的时间离散结构不同,但求解内核仍围绕残差、Jacobian、线性代数和误差预算组织。
适合的选择不是“遇到 ODE 就用最复杂的隐式法”,而是让稳定域、阻尼、精度与线性系统结构匹配。对于扩散半离散这类刚性问题,隐式方法的优势往往来自能够复用稀疏结构或预条件器,并把步长交回真正需要解析的时间尺度。
隐式方法仍遵循常微分方程时间步进框架;每次 Newton 更新又归结为求解一个线性方程组。
参考资料
[1] Tobin A. Driscoll and Richard J. Braun, Fundamentals of Numerical Computation, Implementation of implicit methods,隐式方程、预测与 Newton 求解的开放教材。
[2] Ernst Hairer and Gerhard Wanner, Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems, 2nd rev. ed., Springer, 1996,A/L 稳定、刚性积分和微分代数问题。
[3] SUNDIALS, CVODE: Mathematical Considerations,官方文档中的非线性迭代、加权范数、线性求解与局部误差控制。
[4] Alan C. Hindmarsh et al., “SUNDIALS: Suite of Nonlinear and Differential/Algebraic Equation Solvers,” ACM Transactions on Mathematical Software 31(3), 2005, pp. 363–396。