4. 迭代法不收敛的典型模式

用 Jacobi 或 Gauss-Seidel 解线性方程组时,最让人困惑的不是“算得慢”,而是“算得不对却看不出来”。迭代法不像直接法那样一次给出答案,它每步只产生一个近似解,是否收敛必须靠残差序列来判断。本节把不收敛分成三种典型模式:残差震荡、残差发散和残差停滞,并给出以 Jacobi/Gauss-Seidel 为例的排障步骤。

先统一记号。对线性方程组 Ax = b,第 k 步近似解为 x^(k),残差定义为 r^(k) = b − A x^(k)。工程上更常用相对残差 ‖r^(k)‖ / ‖b‖ 作为收敛判据,因为绝对残差会随问题规模变化而失去可比性。Jacobi 迭代为 x_i^(k+1) = (b_i − Σ_{j≠i} a_ij x_j^(k)) / a_ii,Gauss-Seidel 则在同一轮内立即使用已更新的分量。两者都要求对角占优或谱半径小于 1 才保证收敛,这是判断的出发点。

残差序列 ‖r⁽ᵏ⁾‖/‖b‖ 的三种典型形态 ① 残差震荡 上下摆动、不单调下降 ② 残差发散 持续增大、越算越远 ③ 残差停滞 下降后变平、卡在平台 排障判断路径 记录每步相对残差 与迭代解 x⁽ᵏ⁾ 检查对角占优 |a_ii| > Σ|a_ij| ? 估计谱半径 ρ(B) < 1 ? 换 GS / 松弛 或改直接法 震荡:检查矩阵是否强对角占优, 尝试欠松弛 ω<1 抑制摆动 发散:多为 ρ(B)>1,核对对角元 符号与主元,必要时重排方程 停滞:检查收敛容差是否过严、 是否已到浮点精度极限

一、三种模式的识别特征

残差震荡表现为相对残差在若干量级之间上下摆动,不呈单调下降趋势。常见原因是矩阵只是弱对角占优,Jacobi 迭代矩阵的谱半径接近 1 但仍有部分特征值模长接近 1,导致误差分量来回翻转。此时解本身可能并未发散,但收敛极慢,若容差设得紧,会表现为“永远差一点”。

残差发散表现为相对残差随迭代步数持续增大,几步之内就超过初始残差。这几乎总意味着迭代矩阵谱半径大于 1,典型诱因是对角元绝对值偏小、方程排列不当,或矩阵本身非对角占优。发散是最危险的一种,因为继续迭代只会让数值溢出,必须立即停止。

残差停滞表现为残差先快速下降,随后在某个平台附近几乎不再变化。它有两种可能:一是已经接近机器精度,继续迭代无意义;二是迭代矩阵存在模长接近 1 的特征值,误差的某个分量衰减极慢。区分方法是观察停滞平台是否随容差放宽而移动,以及残差是否已低于 1e-14 量级。

二、以 Jacobi/Gauss-Seidel 为例的排障步骤

第一步,固定记录格式。每步输出迭代序号、相对残差和当前解的最大分量变化量,例如:

k=  0  rel_res=1.000e+00  dx=—
k=  1  rel_res=4.820e-01  dx=2.31e-01
k=  2  rel_res=6.150e-01  dx=1.87e-01   ← 残差回升,疑似震荡
k=  3  rel_res=3.970e-01  dx=2.02e-01
k=  4  rel_res=5.880e-01  dx=1.79e-01

第二步,检查对角占优。对每一行计算 |a_ii| 与 Σ_{j≠i}|a_ij| 的比值,若存在比值小于 1 的行,Jacobi 收敛性没有保证。此时可尝试交换方程顺序,把对角元较大的方程移到对应位置,往往能显著改善。

第三步,估计谱半径。对小型问题可直接计算迭代矩阵 B_J = D^{-1}(L+U) 的特征值;对大型问题可用幂迭代估计。若 ρ(B) ≥ 1,说明该分裂方式本身不收敛,应改用 Gauss-Seidel 或引入松弛因子。

第四步,区分停滞与精度极限。若残差平台在 1e-12 以下且解的变化量已小于机器精度,属于正常终止;若平台在 1e-3 附近不动,则说明收敛因子过小,需要换方法或预处理。

实用判据:连续 5 步相对残差不再下降且下降幅度小于 1%,即可判定为停滞;连续 3 步残差上升且累计升幅超过 20%,即可判定为发散,应立即中止。

三、一个可复现的示例

考虑示例方程组(参数为教学假设,非实测):

[ 4  -1   0 ] [x1]   [ 3 ]
[-1   4  -1 ] [x2] = [ 2 ]
[ 0  -1   3 ] [x3]   [ 4 ]

该矩阵严格对角占优,Jacobi 应收敛。若把第一、二行交换,矩阵变为弱对角占优,Jacobi 迭代矩阵谱半径升至接近 1,残差会出现明显震荡。这个对照说明:同一组方程,排列顺序不同,收敛行为可能完全不同。排障时先做行重排,成本最低、收益最直接。

对 Gauss-Seidel,同一矩阵通常收敛更快,因为它在每步内使用了最新分量。但若矩阵非对称或对角占优被破坏,Gauss-Seidel 也可能发散,且发散速度往往比 Jacobi 更快,因此切换方法后要重新观察前几步残差,不能默认“换了就一定好”。

四、排障时的常见误区

  • 只看最终是否达到容差,不看残差曲线形态,导致把震荡误判为“算得慢”。
  • 容差设得比机器精度还小,把正常的精度极限误判为停滞。
  • 发现发散后继续加大迭代上限,浪费计算且可能溢出。
  • 忽略方程排列与主元选择,把可修复的收敛问题当成方法本身不可用。

把残差序列当作诊断信号,而不是只当作终止条件,是迭代法排障的核心习惯。震荡查占优与松弛,发散查谱半径与排列,停滞查容差与精度极限,三条路径对应三类形态,判断清楚再动手,比盲目调参有效得多。