本页目录

数值线代 III · Krylov方法、重启与真实残差

本页问题:同样的条件数,为什么CG可能走出完全不同的轨迹?一个叫“最小残差”的算法,究竟把哪一种残差变小了?

前置:SVD、QR与后向误差、特征值迭代与残差证据、正定矩阵与正交投影。先在小矩阵上看清几何,再讨论大规模计算的成本。

学习层:曲线下降之前,先读纵轴的名字

同一组方程,可以有几种不同的“进步”

CG每一步希望让一种能量误差变小;GMRES希望在当前搜索空间里把残差变小。但加入预条件器后,程序最小化的可能是经过重新加权的残差。把这些曲线都叫作“误差”,会掩盖它们回答的是不同问题。

下面使用最多12维的透明模型。矩阵、预条件器、起点和每一步向量全部可以查看;它们帮助理解算法,没有承担百万维性能测试的角色。

对照 实际比较 一个不能略过的边界
CG与PCG 谱形状、初始方向、预条件和真实残差 能量误差下降,残差二范数仍可上升
完整与重启GMRES 保留全部基,或每隔几步重新开始 可逆旋转矩阵上,GMRES(1)可以一直停滞
左、右预条件GMRES 最小化加权残差,或原始残差 加权残差下降不能替代原方程的停止检查

关闭JavaScript也能核对。 以下数值来自固定运行记录;现场交互重新执行实际运算。接近机器精度的末位可能依环境变化,停止原因与计算量的定义也在记录中保留。

固定运行:2026-09-11,Node 24.14.0 / darwin arm64。下载完整参数、向量与运算记录。CG采用默认均匀谱κ=25和透明分组M;残差反例为diag(1,100);旋转采用重启长度1;加权反例采用六维Grcar族γ=0、M对角从1到100、重启长度1。均为零初值、共同尺度1、24步预算与10⁻¹²原始相对残差阈值。

固定参数下的量 参考值
CG末步数 12
CG末步归一A误差 2.60549635317e-16
CG末步相对真残差 2.51977281813e-16
PCG末步数 3
PCG末步归一A误差 9.26091187261e-17
PCG末步相对真残差 1.02392660361e-16
二维CG首步α 0.505
二维CG首步相对真残差 4.95
二维CG首步归一A误差 0.700000714214
二维CG首步rho 24.747525
完整GMRES实际步数 2
完整GMRES末步相对真残差 0
GMRES(1)实际步数 24
GMRES(1)末步相对真残差 1
左预条件第1步原始相对残差 1.08106682657
左预条件第1步加权相对残差 0.599062531832
左预条件第3步原始相对残差 1.22074840762
左预条件第3步加权相对残差 0.301577125242

默认CG、PCG均按真实残差达到阈值停止;旋转的完整GMRES浮点真残差为0,GMRES(1)预算结束且相对残差仍为1。左预条件反例的目标下降不替代原始残差验收。这里的浮点零不是精确算术证明。

CG能量与残差、重启停滞及左右预条件的数值对照

插图可打开原尺寸。对数图只画严格正的数;真实0、失败与未定义值留在完整表中。超过1的归一残差仍按真实大小绘出。

1. 乘出来的子空间:先说明允许使用什么信息

求解 \(Ax=b\),给定起点 \(x_0\) 与初始残差 \(r_0=b-Ax_0\)。第 \(k\) 个Krylov空间为

\[ \mathcal K_k(A,r_0) =\operatorname{span}\{r_0,Ar_0,\ldots,A^{k-1}r_0\}. \]

设算法从这一个残差出发,只反复应用同一个固定算子 \(A\),并对已有向量作线性组合,那么它得到的修正就落在相应Krylov空间中。这是关于具体运算模型的说明,不是“任何只调用矩阵乘向量的程序”都必须满足的普遍断言。额外起点、块方法、非线性操作或变化的预条件器都会改变讨论对象。

小空间的意义在于:不必先求整个逆矩阵,就能在

\[ x_0+\mathcal K_k(A,r_0) \]

中挑选一个有明确最优性的候选解。不同方法的区别,首先在于“最优”指什么。

方法 经典条件 精确算术中的选择
CG 实对称正定 当前空间中最小的 \(A\)-范数误差
MINRES 实对称,允许不定 当前空间中最小的残差二范数
GMRES 一般方阵 当前空间中最小的残差二范数
Arnoldi或Lanczos 构造投影空间 用小矩阵描述算子在空间上的作用

对大型问题,稀疏矩阵乘向量、正交化、内存和通信都可能是主要成本。稀疏直接分解的成本还取决于填充、排列和结构,不能一律按稠密 \(O(n^3)\) 判出局。

2. CG最小化的是能量误差

设 \(A=A^T\succ0\),定义

\[ f(x)=\tfrac12x^TAx-b^Tx,\qquad x_*=A^{-1}b. \]

将 \(x=x_*+h\) 代入,利用 \(Ax_*=b\),交叉项消失:

\[ f(x)-f(x_*)=\tfrac12h^TAh =\tfrac12\|x-x_*\|_A^2. \]

因此在一个仿射空间 \(x_0+\mathcal S\) 上最小化二次函数,就等价于最小化能量误差。沿任意 \(v\in\mathcal S\) 的导数为

\[ \left.\frac{d}{dt}f(x+tv)\right|_{t=0} =v^T(Ax-b). \]

极小点满足残差的Galerkin条件

\[ r=b-Ax\perp\mathcal S. \]

严格正定性保证这个极小点唯一。CG在精确算术中取 \(\mathcal S=\mathcal K_k(A,r_0)\),所以

\[ x_k=\arg\min_{x\in x_0+\mathcal K_k(A,r_0)} \|x_*-x\|_A. \]

空间随 \(k\) 嵌套,最小能量误差自然不增。但 \(r_k=A(x_*-x_k)\),不同特征方向会被不同的特征值再次放大;这没有推出 \(\|r_k\|_2\) 同样单调。

3. 短递推怎样保持搜索方向

标准CG从 \(p_0=r_0\) 开始,使用

\[ \begin{aligned} \alpha_k&=\frac{r_k^Tr_k}{p_k^TAp_k},& x_{k+1}&=x_k+\alpha_kp_k,\\ r_{k+1}&=r_k-\alpha_kAp_k,& \beta_k&=\frac{r_{k+1}^Tr_{k+1}}{r_k^Tr_k},\\ p_{k+1}&=r_{k+1}+\beta_kp_k. \end{aligned} \]

这些系数不是经验学习率。假设前面的搜索方向已经 \(A\)-共轭,即 \(p_i^TAp_j=0\)(\(i\ne j\)),并且残差正交于已搜索空间。沿 \(p_k\) 作精确线搜索给出

\[ \alpha_k=\frac{r_k^Tp_k}{p_k^TAp_k}. \]

由于 \(p_k=r_k+\beta_{k-1}p_{k-1}\) 且 \(r_k\perp p_{k-1}\),分子恰为 \(r_k^Tr_k\)。这一步让新残差与 \(p_k\) 正交,同时由共轭性保持它与更早方向正交。

再要求 \(p_{k+1}^TAp_k=0\),得到

\[ \beta_k=-\frac{r_{k+1}^TAp_k}{p_k^TAp_k}. \]

利用 \(Ap_k=(r_k-r_{k+1})/\alpha_k\) 与 \(r_{k+1}\perp r_k\),就化为上面的残差平方比。对更早的 \(p_j\),有 \(Ap_j\in\mathcal K_{j+2}\);新残差对已搜索空间的正交性,加上已有方向之间的共轭性,使这些更早的共轭条件继续成立。由此完成逐步归纳,而不必每轮存下并正交化全部历史方向。

浮点计算中的正交与共轭只会近似保持。实验记录每个实际 \(x,r,z,p,Ap,\alpha,\beta\),并另报方向的归一化共轭内积,不能把理论上的零直接填进表格。

4. 把误差变成多项式问题

空间中的修正可写成 \(q_{k-1}(A)r_0\),其中多项式次数至多 \(k-1\)。因为 \(r_0=Ae_0\),\(e_0=x_*-x_0\),所以

\[ e_k=p_k(A)e_0,\qquad p_k(t)=1-tq_{k-1}(t),\qquad p_k(0)=1. \]

在正交特征基中写 \(e_0=\sum_i c_iv_i\),便有

\[ \|p_k(A)e_0\|_A^2 =\sum_i\lambda_i|c_i|^2|p_k(\lambda_i)|^2. \]

这解释了同一个条件数为什么可以对应不同轨迹:实际问题同时取决于离散谱点的位置和初始方向权重。

若有效误差只覆盖 \(d\) 个不同的正特征值,选择

\[ p_d(t)=\prod_{\lambda\in\Lambda_{\rm active}} \left(1-\frac t\lambda\right) \]

就能把这些方向全部消去。因此精确算术至多需要 \(d\) 步,一般有 \(d\le n\)。但“只分布在三个点”与“挤在三个有宽度的簇中”不是同一件事:在簇中心取零,不能把簇内所有不同谱点精确消灭。

实验同时保留重复三值谱与有宽度的近簇谱;初值为零的方向记为无可定义的误差比,不因其分量很小就擅自删除。对角系统的参考解由实际 \(b_i/\lambda_i\) 单独计算,生成数据时使用的向量另列,避免不一致的“已知解”冒充参考。

5. Chebyshev界:只知道谱区间时的保证

设谱位于 \([a,b]\),\(0\lt a\lt b\),\(\kappa=b/a\)。CG的最优性给出

\[ \frac{\|e_k\|_A}{\|e_0\|_A} \le \min_{\deg p\le k,\ p(0)=1} \max_{t\in[a,b]}|p(t)|. \]

选取归一化Chebyshev多项式

\[ p(t)= \frac{T_k\!\left(\frac{a+b-2t}{b-a}\right)} {T_k\!\left(\frac{a+b}{b-a}\right)}. \]

分母使 \(p(0)=1\),分子的自变量在谱区间内落于 \([-1,1]\),因此其绝对值不超过1。令

\[ q=\frac{\sqrt\kappa-1}{\sqrt\kappa+1},\qquad w=q^{-1}. \]

当 \(z=(\kappa+1)/(\kappa-1)>1\) 时,

\[ T_k(z)=\frac{w^k+w^{-k}}2, \]

从而得到

\[ \frac{\|e_k\|_A}{\|e_0\|_A} \le\frac{2q^k}{1+q^{2k}} \le 2q^k. \]

再结合嵌套空间的不增性,可以显示 \(\min\{1,2q^k\}\)。这是精确算术的区间比较界,不是具体求解器的步数预测,也不是全部浮点舍入都被包括的误差界。

边界要分开:\(k=0\) 时归一误差为1;\(\kappa=1\) 时对称正定矩阵是标量乘单位阵,非零误差一步消去;\(e_0=0\) 时一开始就是答案。接近1并不等于1,不能把一个正的小界直接改成0。

6. 预条件CG:改变几何也要保留正定性

取容易求解的 \(M=M^T\succ0\)。对称变换

\[ \widetilde A=M^{-1/2}AM^{-1/2},\qquad y=M^{1/2}x,\qquad \widetilde b=M^{-1/2}b \]

保持正定性,并且

\[ \|y_*-y\|_{\widetilde A}^2 =\|x_*-x\|_A^2. \]

把变换后系统的CG写回原变量,就得到PCG:

\[ z_k=M^{-1}r_k,\qquad \rho_k=r_k^Tz_k, \]

以及 \(\alpha_k=\rho_k/(p_k^TAp_k)\)、\(\beta_k=\rho_{k+1}/\rho_k\)、\(p_{k+1}=z_{k+1}+\beta_kp_k\)。

一般情形不能把 \(M^{-1}A\) 当成欧氏内积下的对称矩阵。用于CG区间界的是与它相似的对称正定矩阵 \(\widetilde A\) 的谱比。只有本页对角模型中,才可直接写

\[ \mu_i=\lambda_i/m_i,\qquad \kappa_{\rm eff}=\frac{\max_i\mu_i}{\min_i\mu_i}. \]

分组预条件器明确选择 \(m_i=\lambda_i/\nu_i\),让 \(\nu_i\) 取三个指定值。这是用于观察有效谱的教学构造,不是处理未知大矩阵的通用方案。Jacobi取原矩阵对角;在已经对角的模型里它本身就完成了主要求解工作,不能据此宣称“免费一步求解”。

预条件器也可能无益甚至使迭代更多。把 \(M\) 整体乘一个正数虽然不改变有效谱的条件数,却会改变 \(\rho_k\) 的大小;因此不能拿 \(\rho_k\) 与原始残差的阈值直接比较。Netlib的说明也将预条件的变换、构建与应用成本分别讨论。

7. Arnoldi:把大残差问题投影成小问题

令 \(\beta=\|r_0\|_2\),\(v_1=r_0/\beta\)。Arnoldi每轮先算 \(w=Av_j\),再消去它沿已有基的投影:

\[ h_{ij}=v_i^Tw,\qquad w\leftarrow w-h_{ij}v_i. \]

剩余向量的长度给出 \(h_{j+1,j}\),归一化后得到下一根基向量。把所有步骤放在一起,

\[ AV_k=V_{k+1}\overline H_k, \]

其中 \(\overline H_k\) 是 \((k+1)\times k\) 的上Hessenberg矩阵。此处的等式先在精确算术中理解;实验执行两遍改良Gram–Schmidt,并记录两遍的每个投影及剩余向量。

候选解写成 \(x=x_0+V_ky\),于是

\[ b-Ax =V_{k+1}(\beta e_1-\overline H_ky). \]

若 \(V_{k+1}\) 列正交,范数被保留:

\[ \|b-Ax\|_2 =\|\beta e_1-\overline H_ky\|_2. \]

原来的大空间最小残差问题,就变成只有 \(k\) 个未知量的小最小二乘。GMRES在这里用QR求解;本页逐步执行实际Givens旋转,并保存旋转前后矩阵、右端和三角解,没有形成 \(\overline H_k^T\overline H_k\)。

8. 重启GMRES:节约历史信息也会失去它的好处

完整GMRES保留整个基。经过 \(k\) 步,存储基的成本约为 \(O(nk)\),正交化总工作量通常随 \(k\) 增长。重启GMRES\((m)\)每做至多 \(m\) 步,就以当前解重新计算残差、建立新的基。

它仍在当前周期的小空间中最小化残差,但不再是全部历史 \(k\) 维空间中的最优解。重启长度的选择牵涉内存与收敛,不能从“矩阵可逆”推断任意小的 \(m\) 都有效。Netlib的GMRES讨论明确保留了重启过短导致停滞的情形。

一个不需要大数据的反例是

\[ A=\begin{pmatrix}0&-1\\1&0\end{pmatrix},\qquad b=e_1,\qquad x_0=0. \]

GMRES第一步只能试 \(x=\alpha e_1\),于是

\[ \|b-Ax\|_2^2 =\|e_1-\alpha e_2\|_2^2 =1+\alpha^2. \]

最优值出现在 \(\alpha=0\),完全没有进步。GMRES\((1)\)重启后面对同一个问题,因此精确算术中永久停滞。完整GMRES第二步已经有 \(\operatorname{span}\{e_1,e_2\}\),能得到 \(x_*=-e_2\)。

这也说明“残差单调不增”与“残差一定趋于0”不同:常数曲线同样不增。

9. 左右预条件:同一个解,不同的最小化范数

左预条件解

\[ M^{-1}Ax=M^{-1}b. \]

将普通GMRES用于这个变换后的系统,最小化的是 \(\|M^{-1}(b-Ax)\|_2\)。它不是原始残差二范数。

右预条件改变量 \(x=M^{-1}y\),解

\[ AM^{-1}y=b. \]

在对应的修正空间中,普通GMRES最小化的就是 \(\|b-AM^{-1}y\|_2=\|b-Ax\|_2\)。预条件器改变搜索方向的形成方式,但没有改变这个被最小化的残差。

所以,同一个可逆 \(M\) 可以保留原问题的解,却让两种算法画出不同曲线。左预条件的第一步尤其容易检查。记

\[ d=M^{-1}r_0,\qquad g=M^{-1}Ad. \]

试探 \(x=x_0+\alpha d\),最小化 \(\|d-\alpha g\|_2\) 得到

\[ \alpha=\frac{g^Td}{g^Tg}. \]

这个系数只保证加权目标最优,没有保证原始 \(\|r_0-\alpha Ad\|_2\) 下降。实验将两个范数同时保留;即使加权曲线很好看,也使用显式原始残差判断是否满足所声明的停止标准。

10. 浮点停止、递推偏差与实际工作量

本页区分以下量:

\[ r_k^{\rm true}=b-Ax_k,\qquad r_k^{\rm rec}\ \text{为递推保存的残差},\qquad \|r_k^{\rm rec}-r_k^{\rm true}\|_2. \]

短递推可以节省工作,却会积累舍入偏差。只看递推残差或小最小二乘的残差,都可能漏掉原方程里的误差。因此实验每步重算 \(b-Ax_k\),并公开这些核对的额外成本。

对 \(b\ne0\),本页停止条件为

\[ \frac{\|b-Ax_k\|_2}{\|b\|_2}\le\tau. \]

真实浮点残差恰为0与达到阈值分开标记。\(b=0\)且零初值的模型直接检查初始残差;不执行会除以0的归一化。小残差仍不自动保证前向误差小,条件数问题可回看第一讲。

Arnoldi剩余向量很小时,实验按明示的机器精度阈值停止扩展,把实际舍去的向量和范数记录下来。只有原始残差也达到要求,才报告成功;否则显示近退化或预算结束。完整 \(n\) 维空间的精确算术结论,不能代替浮点运行中的这一步判断。

成本表统计求解过程实际调用的矩阵乘向量和预条件求解,包括显式残差检查;为展示恒等式而额外重算的诊断不计入求解调用,说明中单列。这个教学实现每一步重新分解小最小二乘,目的是展示过程;它没有实现大型库的增量更新和并行优化,不能拿这些小模型的耗时作性能排行榜。

11. 四道迁移题与完整答案

题一:CG的残差上升是否违反最优性?

取 \(A=\operatorname{diag}(1,100)\)、\(b=(1,1/10)^T\)、\(x_0=0\)。计算第一步,比较残差二范数与能量误差。

答案:一个范数上升,另一个范数下降

初始 \(p_0=r_0=b\),所以

\[ \alpha_0=\frac{1+1/100}{1+1}=\frac{101}{200}. \]

第一步残差为

\[ r_1=b-\alpha_0Ab =\left(\frac{99}{200},-\frac{99}{20}\right)^T. \]

因而 \(\|r_1\|_2/\|r_0\|_2=99/20=4.95\),确实上升。另一方面,\(x_*=(1,1/1000)^T\),能量误差是二次函数的最小化对象。沿非零 \(p_0\) 的精确线搜索严格降低该函数,因此 \(\|e_1\|_A\lt\|e_0\|_A\)。也可以代入 \(e_1=(99/200,-99/2000)^T\),计算

\[ \frac{\|e_1\|_A^2}{\|e_0\|_A^2} =\frac{9801}{20002}\lt1. \]

这里没有矛盾;把两种纵轴都叫作“误差下降”,才会产生矛盾。

题二:三个谱点与三个谱簇有什么不同?

解释为什么只含三个不同正特征值的SPD问题可在精确算术中至多三步结束,而三个窄簇没有同样的三步精确保证。

答案:多项式的零点消去的是点

若三个有效谱点为 \(\lambda_1,\lambda_2,\lambda_3\),取

\[ p(t)=\prod_{i=1}^3(1-t/\lambda_i). \]

它满足 \(p(0)=1\) 且在三个谱点上均为0,于是 \(p(A)e_0=0\)。CG在该空间最优,能量误差也必须为0。若簇内还有不同谱点,三次多项式不能在所有这些点都为0;在簇中心取零只能使附近的值较小。实际效果依赖簇宽、间距与初始方向权重,不能直接报“三步”。

题三:为何可逆旋转也会使GMRES(1)永久停滞?

对第8节的矩阵,给出每个重启周期的最优系数,以及完整GMRES第二步的解。

答案:每次都扔掉了下一步需要的方向

第一步可用空间是 \(\operatorname{span}\{e_1\}\),残差平方为 \(1+\alpha^2\),唯一最优系数是0。当前解仍为0,重启后的起始残差仍为 \(e_1\),因此同一个计算无限重复。

完整第二步保留 \(Ae_1=e_2\),搜索空间成为整个二维空间。取 \(x=-e_2\),有 \(Ax=e_1=b\)。矩阵可逆只保证真解存在;重启策略仍可能不断选择同一个无进展的小空间。

题四:预条件后残差很小,应该用哪一个量验收?

左预条件GMRES报告 \(\|M^{-1}r\|_2\) 下降,而 \(\|r\|_2\) 增大。这是否违反最小残差原理?把 \(M\) 整体乘一个很大的常数会带来什么危险?

答案:必须先说清楚最小化对象和停止标准

左预条件的最优性针对 \(\|M^{-1}r\|_2\),所以原始范数上升不构成反例。两个范数满足

\[ \|r\|_2\le\|M\|_2\|M^{-1}r\|_2, \]

但没有无条件的等值关系。把 \(M\) 换成 \(cM\),其加权残差会缩小为原来的 \(1/c\);这可能只是重新改了数值尺度,并不表示原方程更准确。

PCG中 \(\rho=r^TM^{-1}r\) 同样会缩小为 \(1/c\),不能把它直接与原残差阈值作比较。本页用显式 \(\|b-Ax\|_2/\|b\|_2\) 验收所声明的目标,并把加权量作为另一个有明确含义的读数。

12. 将小模型的判断带到更大的计算

选择方法时,先确认对称性、正定性、可用的算子操作和要满足的误差标准;再考虑基的存储、预条件器的构建与复用、显式残差检查和并行成本。固定维数不能单独决定哪一种方法总是更快。

随机化低秩分解提供另一条缩小问题的路径:随机试探矩阵作用,构造候选列空间,再处理压缩后的矩阵。Halko、Martinsson与Tropp的原始工作可作为后续阅读。这里不把“高概率接近最佳截断”写成没有采样、超采样、谱尾与概率条件的普适保证;本页的CG和GMRES实验也没有验证随机SVD。

下一门矩阵分析:范数、谱半径与扰动继续追问:不同矩阵范数、谱与条件数之间究竟可以推出什么。遇到“残差很小”的结论时,先保留本页的习惯——它是哪一个残差、怎样算出、与哪个问题有关?