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 的誤差界中清晰可見:收斂速度受條件數支配。良態矩陣幾步即收斂;病態矩陣則可能爬行數千步。正是這一事實,使下一篇——預處理——不是可選的修飾,而是「能完成的求解器」與「永不完成的求解器」之間的分界。