JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

CG 与 GMRES:选择“最佳”的含义

两种 Krylov 方法主导着实践,它们的区别在于一个假设。共轭梯度利用对称性,以极小的内存最小化能量;GMRES 抛开该假设,对任意矩阵最小化残差。本篇把这一权衡讲透。

构建正交规范的 Krylov 基

原始的 Krylov 向量 r_0, A r_0, A^2 r_0, ... 是数值上的灾难:它们全都朝主特征向量倾斜,因此很快变得近乎平行并丧失线性无关性。在做任何有用之事之前,你必须把它们正交规范化。Arnoldi 迭代正是做这件事——在基生成的同时施加Gram-Schmidt过程——产生 Krylov 子空间的一组正交规范基,并附带产生一个表示 A 在该基上的小型 Hessenberg 矩阵。

共轭梯度:对称性是一份礼物

当 A 是对称正定时,共轭梯度(CG)是首选方法。它把 A x = b 重新表述为最小化能量 f(x) = (1/2) x^T A x - b^T x,其最小值点恰好是解。CG 沿着与所有先前方向 A-正交(共轭)的方向下降,这正是每一步都能依赖两项 Lanczos 递推的原因——无论你迭代多少次,它都只存储寥寥几个向量。

Conjugate Gradient for symmetric positive-definite A x = b:

  x = x0;  r = b - A*x;  p = r;  rs = <r,r>
  repeat:
      Ap    = A * p                 # the one matvec per step
      alpha = rs / <p, Ap>          # exact line minimum
      x     = x + alpha * p
      r     = r - alpha * Ap
      rs_new = <r, r>
      if sqrt(rs_new) < tol: stop
      beta  = rs_new / rs           # keeps directions A-conjugate
      p     = r + beta * p
      rs    = rs_new

Memory: x, r, p, Ap  -> just 4 vectors, independent of step count.
Error bound: ||e_k||_A / ||e_0||_A <= 2 ((sqrt(K)-1)/(sqrt(K)+1))^k,
            where K = condition number.  Small K => fast.
CG:每步一次矩阵-向量乘积、恒定四个向量;收敛速度由条件数的平方根决定。

GMRES:当对称性不复存在时

大多数真实矩阵并不对称——对流项、非对称耦合、一般算子。这时 CG 的短递推崩溃,你需要 GMRES(广义最小残差法)。在第 m 步它在 x_0 + K_m 中挑出在整个 Krylov 子空间最小化残差范数 ||b - A x|| 的 x,方法是在来自 ArnoldiHessenberg 矩阵上求解一个微型最小二乘问题。它的残差单调不增——永不会变差。

两种方法共享一个致命弱点,在 CG 的误差界中清晰可见:收敛速度受条件数支配。良态矩阵几步即收敛;病态矩阵则可能爬行数千步。正是这一事实,使下一篇——预处理——不是可选的修饰,而是“能完成的求解器”与“永不完成的求解器”之间的分界。