在数值线性代数中，共轭梯度法是一种求解对称正定线性方程组

\boldsymbol{Ax}=\boldsymbol{b}
的迭代方法。共轭梯度法可以从不同的角度推导而得，包括作为求解最优化问题的共轭方向法的特例，以及作为求解特征值问题的Arnoldi/Lanczos迭代的变种。

本条目记述这些推导方法中的重要步骤。

从共轭方向法推导
--------

从Arnoldi/Lanczos迭代推导
--------------------

共轭梯度法可以看作Arnoldi/Lanczos迭代应用于求解线性方程组时的一个变种。

### 一般Arnoldi方法

Arnoldi迭代从一个向量\boldsymbol{r}\_0开始，通过定义\boldsymbol{v}\_i=\boldsymbol{w}\_i/\lVert\boldsymbol{w}\_i\rVert\_2，其中

\boldsymbol{w}\_i=\begin{cases}
\boldsymbol{r}\_0 & \text{if }i=1\text{,}\\
\boldsymbol{Av}\_{i-1}-\sum\_{j=1}^{i-1}(\boldsymbol{v}\_j^\mathrm{T}\boldsymbol{Av}\_{i-1})\boldsymbol{v}\_j & \text{if }i>1\text{,}
\end{cases}
逐步建立Krylov子空间

\mathcal{K}(\boldsymbol{A},\boldsymbol{r}\_0)=\{\boldsymbol{r}\_0,\boldsymbol{Ar}\_0,\boldsymbol{A}^2\boldsymbol{r}\_0,\ldots\}
的一组标准正交基\{\boldsymbol{v}\_1,\boldsymbol{v}\_2,\boldsymbol{v}\_3,\ldots\}。

换言之，对于i>1，\boldsymbol{v}\_i由将\boldsymbol{Av}\_{i-1}相对于\{\boldsymbol{v}\_1,\boldsymbol{v}\_2,\ldots,\boldsymbol{v}\_{i-1}\}进行Gram-Schmidt正交化然后归一化得到。

写成矩阵形式，迭代过程可以表示为

\boldsymbol{AV}\_i=\boldsymbol{V}\_{i+1}\boldsymbol{\tilde{H}}\_i\text{,}
其中

\begin{align}
\boldsymbol{V}\_i&=\begin{bmatrix}
\boldsymbol{v}\_1 & \boldsymbol{v}\_2 & \cdots & \boldsymbol{v}\_i
\end{bmatrix}\text{,}\\
\boldsymbol{\tilde{H}}\_i&=\begin{bmatrix}
h\_{11} & h\_{12} & h\_{13} & \cdots & h\_{1,i}\\
h\_{21} & h\_{22} & h\_{23} & \cdots & h\_{2,i}\\
& h\_{32} & h\_{33} & \cdots & h\_{3,i}\\
& & \ddots & \ddots & \vdots\\
& & & h\_{i,i-1} & h\_{i,i}\\
& & & & h\_{i+1,i}
\end{bmatrix}=\begin{bmatrix}
\boldsymbol{H}\_i\\
h\_{i+1,i}\boldsymbol{e}\_i^\mathrm{T}
\end{bmatrix}\text{,}\\
h\_{ji}&=\begin{cases}
\boldsymbol{v}\_j^\mathrm{T}\boldsymbol{Av}\_i & \text{if }j\leq i\text{,}\\
\lVert\boldsymbol{w}\_{i+1}\rVert\_2 & \text{if }j=i+1\text{,}\\
0 & \text{if }j>i+1\text{.}
\end{cases}
\end{align}
当应用于求解线性方程组时，Arnoldi迭代对应于初始解\boldsymbol{x}\_0的残量\boldsymbol{r}\_0=\boldsymbol{b}-\boldsymbol{Ax}\_0开始迭代，在每一步迭代之后计算\boldsymbol{y}\_i=\boldsymbol{H}\_i^{-1}(\lVert\boldsymbol{r}\_0\rVert\_2\boldsymbol{e}\_1)和新的近似解\boldsymbol{x}\_i=\boldsymbol{x}\_0+\boldsymbol{V}\_i\boldsymbol{y}\_i.

### 直接Lanzcos方法

在余下的讨论中，我们假定\boldsymbol{A}是对称正定矩阵。由于\boldsymbol{A}的对称性, 上Hessenberg矩阵\boldsymbol{H}\_i=\boldsymbol{V}\_i^\mathrm{T}\boldsymbol{AV}\_i变成对阵三对角矩阵。于是它可以被更明确地表示为

\boldsymbol{H}\_i=\begin{bmatrix}
a\_1 & b\_2\\
b\_2 & a\_2 & b\_3\\
& \ddots & \ddots & \ddots\\
& & b\_{i-1} & a\_{i-1} & b\_i\\
& & & b\_i & a\_i
\end{bmatrix}\text{.}
这使得迭代中的\boldsymbol{v}\_i有一个简短的三项递推式。Arnoldi迭代从而简化为Lanczos迭代。

由于\boldsymbol{A}对称正定，\boldsymbol{H}\_i同样也对称正定。因此，\boldsymbol{H}\_i可以通过不选主元的LU分解分解为

\boldsymbol{H}\_i=\boldsymbol{L}\_i\boldsymbol{U}\_i=\begin{bmatrix}
1\\
c\_2 & 1\\
& \ddots & \ddots\\
& & c\_{i-1} & 1\\
& & & c\_i & 1
\end{bmatrix}\begin{bmatrix}
d\_1 & b\_2\\
& d\_2 & b\_3\\
& & \ddots & \ddots\\
& & & d\_{i-1} & b\_i\\
& & & & d\_i
\end{bmatrix}\text{,}
其中c\_i和d\_{i}有简单的递推式：

\begin{align}
c\_i&=b\_i/d\_{i-1}\text{,}\\
d\_i&=\begin{cases}
a\_1 & \text{if }i=1\text{,}\\
a\_i-c\_ib\_i & \text{if }i>1\text{.}
\end{cases}
\end{align}
改写\boldsymbol{x}\_i=\boldsymbol{x}\_0+\boldsymbol{V}\_i\boldsymbol{y}\_i为

\begin{align}
\boldsymbol{x}\_i&=\boldsymbol{x}\_0+\boldsymbol{V}\_i\boldsymbol{H}\_i^{-1}(\lVert\boldsymbol{r}\_0\rVert\_2\boldsymbol{e}\_1)\\
&=\boldsymbol{x}\_0+\boldsymbol{V}\_i\boldsymbol{U}\_i^{-1}\boldsymbol{L}\_i^{-1}(\lVert\boldsymbol{r}\_0\rVert\_2\boldsymbol{e}\_1)\\
&=\boldsymbol{x}\_0+\boldsymbol{P}\_i\boldsymbol{z}\_i\text{,}
\end{align}
其中

\begin{align}
\boldsymbol{P}\_i&=\boldsymbol{V}\_{i}\boldsymbol{U}\_i^{-1}\text{,}\\
\boldsymbol{z}\_i&=\boldsymbol{L}\_i^{-1}(\lVert\boldsymbol{r}\_0\rVert\_2\boldsymbol{e}\_1)\text{.}
\end{align}
此时需要观察到

\begin{align}
\boldsymbol{P}\_i&=\begin{bmatrix}
\boldsymbol{P}\_{i-1} & \boldsymbol{p}\_i
\end{bmatrix}\text{,}\\
\boldsymbol{z}\_i&=\begin{bmatrix}
\boldsymbol{z}\_{i-1}\\
\zeta\_i
\end{bmatrix}\text{.}
\end{align}
实际上，\boldsymbol{p}\_i和\zeta\_i同样有简短的递推式：

\begin{align}
\boldsymbol{p}\_i&=\frac{1}{d\_i}(\boldsymbol{v}\_i-b\_i\boldsymbol{p}\_{i-1})\text{,}\\
\alpha\_i&=-c\_i\zeta\_{i-1}\text{.}
\end{align}
通过这个形式，我们得到\boldsymbol{x}\_i的一个简单的递推式：

\begin{align}
\boldsymbol{x}\_i&=\boldsymbol{x}\_0+\boldsymbol{P}\_i\boldsymbol{z}\_i\\
&=\boldsymbol{x}\_0+\boldsymbol{P}\_{i-1}\boldsymbol{z}\_{i-1}+\zeta\_i\boldsymbol{p}\_i\\
&=\boldsymbol{x}\_{i-1}+\zeta\_i\boldsymbol{p}\_i\text{.}
\end{align}
以上的递推关系立即导出比共轭梯度法稍微更复杂的直接Lanczos方法。

### 从正交性和共轭性导出共轭梯度法

如果我们允许缩放\boldsymbol{p}\_i并通过常数因子补偿缩放的系数，我们可能可以得到以下形式的更简单的递推式：

\begin{align}
\boldsymbol{x}\_i&=\boldsymbol{x}\_{i-1}+\alpha\_{i-1}\boldsymbol{p}\_{i-1}\text{,}\\
\boldsymbol{r}\_i&=\boldsymbol{r}\_{i-1}-\alpha\_{i-1}\boldsymbol{Ap}\_{i-1}\text{,}\\
\boldsymbol{p}\_i&=\boldsymbol{r}\_i+\beta\_{i-1}\boldsymbol{p}\_{i-1}\text{.}
\end{align}
作为简化的前提，我们现在推导\boldsymbol{r}\_i的正交性和\boldsymbol{p}\_i的共轭性，即对于i\neq j,

\begin{align}
\boldsymbol{r}\_i^\mathrm{T}\boldsymbol{r}\_j&=0\text{,}\\
\boldsymbol{p}\_i^\mathrm{T}\boldsymbol{Ap}\_j&=0\text{.}
\end{align}
各个残量之间满足正交性的原因是\boldsymbol{r}\_i实际上可由\boldsymbol{v}\_{i+1}乘上一个系数而得。这是因为对于i=0，\boldsymbol{r}\_0=\lVert\boldsymbol{r}\_0\rVert\_2\boldsymbol{v}\_1，对于i>0，

\begin{align}
\boldsymbol{r}\_i&=\boldsymbol{b}-\boldsymbol{Ax}\_i\\
&=\boldsymbol{b}-\boldsymbol{A}(\boldsymbol{x}\_0+\boldsymbol{V}\_i\boldsymbol{y}\_i)\\
&=\boldsymbol{r}\_0-\boldsymbol{AV}\_i\boldsymbol{y}\_i\\
&=\boldsymbol{r}\_0-\boldsymbol{V}\_{i+1}\boldsymbol{\tilde{H}}\_i\boldsymbol{y}\_i\\
&=\boldsymbol{r}\_0-\boldsymbol{V}\_i\boldsymbol{H}\_i\boldsymbol{y}\_i-h\_{i+1,i}(\boldsymbol{e}\_i^\mathrm{T}\boldsymbol{y}\_i)\boldsymbol{v}\_{i+1}\\
&=\lVert\boldsymbol{r}\_0\rVert\_2\boldsymbol{v}\_1-\boldsymbol{V}\_i(\lVert\boldsymbol{r}\_0\rVert\_2\boldsymbol{e}\_1)-h\_{i+1,i}(\boldsymbol{e}\_i^\mathrm{T}\boldsymbol{y}\_i)\boldsymbol{v}\_{i+1}\\
&=-h\_{i+1,i}(\boldsymbol{e}\_i^\mathrm{T}\boldsymbol{y}\_i)\boldsymbol{v}\_{i+1}\text{.}\end{align}
要得到\boldsymbol{p}\_i的共轭性，只需证明\boldsymbol{P}\_i^\mathrm{T}\boldsymbol{AP}\_i是对角矩阵：

\begin{align}
\boldsymbol{P}\_i^\mathrm{T}\boldsymbol{AP}\_i&=\boldsymbol{U}\_i^{-\mathrm{T}}\boldsymbol{V}\_i^\mathrm{T}\boldsymbol{AV}\_i\boldsymbol{U}\_i^{-1}\\
&=\boldsymbol{U}\_i^{-\mathrm{T}}\boldsymbol{H}\_i\boldsymbol{U}\_i^{-1}\\
&=\boldsymbol{U}\_i^{-\mathrm{T}}\boldsymbol{L}\_i\boldsymbol{U}\_i\boldsymbol{U}\_i^{-1}\\
&=\boldsymbol{U}\_i^{-\mathrm{T}}\boldsymbol{L}\_i
\end{align}
是对称的下三角矩阵，因而必然是对角矩阵。

现在我们可以单纯由\boldsymbol{r}\_i的正交性和\boldsymbol{p}\_i的共轭性推导相对于缩放后的\boldsymbol{p}\_i的常数因子\alpha \_{i}和\beta \_{i}。

由于\boldsymbol{r}\_i的正交性，必然有\boldsymbol{r}\_{i+1}^\mathrm{T}\boldsymbol{r}\_i=(\boldsymbol{r}\_i-\alpha\_i\boldsymbol{Ap}\_i)^\mathrm{T}\boldsymbol{r}\_i=0。于是

\begin{align}
\alpha\_i&=\frac{\boldsymbol{r}\_i^\mathrm{T}\boldsymbol{r}\_i}{\boldsymbol{r}\_i^\mathrm{T}\boldsymbol{Ap}\_i}\\
&=\frac{\boldsymbol{r}\_i^\mathrm{T}\boldsymbol{r}\_i}{(\boldsymbol{p}\_i-\beta\_{i-1}\boldsymbol{p}\_{i-1})^\mathrm{T}\boldsymbol{Ap}\_i}\\
&=\frac{\boldsymbol{r}\_i^\mathrm{T}\boldsymbol{r}\_i}{\boldsymbol{p}\_i^\mathrm{T}\boldsymbol{Ap}\_i}\text{.}
\end{align}
类似地，由于\boldsymbol{p}\_i的共轭性，必然有\boldsymbol{p}\_{i+1}^\mathrm{T}\boldsymbol{Ap}\_i=(\boldsymbol{r}\_{i+1}+\beta\_i\boldsymbol{p}\_i)^\mathrm{T}\boldsymbol{Ap}\_i=0。于是

\begin{align}
\beta\_i&=-\frac{\boldsymbol{r}\_{i+1}^\mathrm{T}\boldsymbol{Ap}\_i}{\boldsymbol{p}\_i^\mathrm{T}\boldsymbol{Ap}\_i}\\
&=-\frac{\boldsymbol{r}\_{i+1}^\mathrm{T}(\boldsymbol{r}\_i-\boldsymbol{r}\_{i+1})}{\alpha\_i\boldsymbol{p}\_i^\mathrm{T}\boldsymbol{Ap}\_i}\\
&=\frac{\boldsymbol{r}\_{i+1}^\mathrm{T}\boldsymbol{r}\_{i+1}}{\boldsymbol{r}\_i^\mathrm{T}\boldsymbol{r}\_i}\text{.}
\end{align}
推导至此完成。

参考文献
----

1. Hestenes, M. R.; Stiefel, E.  (PDF). Journal of Research of the National Bureau of Standards. 1952年12月, **49** (6)  [2010-06-20]. （原始内容 (PDF)存档于2010-05-05）.
2. Saad, Y..  2nd. SIAM. 2003. ISBN 978-0898715347.