共轭梯度法
字数 2982 2025-10-26 23:21:41

共轭梯度法

共轭梯度法是一种用于求解大型稀疏线性方程组的迭代算法,尤其适用于对称正定矩阵。我将从基础概念开始,逐步解释其原理和步骤。

  1. 问题背景与基本思想
    我们考虑线性方程组 \(A\mathbf{x} = \mathbf{b}\),其中 \(A\) 是一个 \(n \times n\) 的对称正定矩阵,\(\mathbf{b}\) 是已知向量,\(\mathbf{x}\) 是待求解的未知向量。
  • 对称正定矩阵:满足 \(A = A^{T}\) 且对所有非零向量 \(\mathbf{z}\)\(\mathbf{z}^{T}A\mathbf{z} > 0\)。这个性质保证了方程组有唯一解。
  • 核心思想转换:求解 \(A\mathbf{x} = \mathbf{b}\) 可以等价于最小化一个二次函数:\(f(\mathbf{x}) = \frac{1}{2} \mathbf{x}^{T} A \mathbf{x} - \mathbf{b}^{T} \mathbf{x}\)。可以验证,函数 \(f(\mathbf{x})\) 的梯度(一阶导数向量)为 \(\nabla f(\mathbf{x}) = A\mathbf{x} - \mathbf{b}\)。因此,令梯度为零向量(求极小值点)正好对应了原方程 \(A\mathbf{x} = \mathbf{b}\)
    • 几何直观:这个二次函数的等高面是n维空间中的椭球。最小值点就是这个椭球的中心。
  1. 最速下降法及其缺陷
    一个最直观的迭代最小化方法是最速下降法:从某个初始猜测 \(\mathbf{x}_0\) 开始,在每一步都沿着当前点梯度(即残差 \(\mathbf{r} = \mathbf{b} - A\mathbf{x}\) 的负方向)下降,因为这是函数值下降最快的方向。

    • 步骤
  2. 计算残差:\(\mathbf{r}_k = \mathbf{b} - A \mathbf{x}_k\)

  3. 沿残差方向移动:\(\mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{r}_k\)

  4. 选择步长 \(\alpha_k\) 使得 \(f(\mathbf{x}_{k+1})\) 最小化。

    • 缺陷:虽然每一步都沿局部最速方向下降,但整个路径可能是锯齿形的,收敛速度可能很慢,特别是在问题的条件数(矩阵特征值分布的比例)很大时。
  5. 共轭方向法
    共轭梯度法是共轭方向法的一种。为了克服最速下降法的锯齿现象,我们引入“共轭”的概念。

  • A-共轭:两个向量 \(\mathbf{d}_i\)\(\mathbf{d}_j\) 关于矩阵 \(A\) 是共轭的(或称A-正交),如果满足 \(\mathbf{d}_i^{T} A \mathbf{d}_j = 0\)(当 \(i \neq j\) 时)。
  • 关键性质:如果我们有一组彼此A-共轭的搜索方向 \(\{\mathbf{d}_0, \mathbf{d}_1, ..., \mathbf{d}_{n-1}\}\),那么沿着这些方向依次进行一维精确搜索(寻找最优步长),可以在最多 \(n\) 步内精确得到方程组的解。
    • 几何解释:在二次函数的等高面(椭球)空间中,A-共轭方向是相互“正交”的。沿着这些方向搜索,每一步都会精确地消除误差在某个维度上的分量,不会破坏之前步骤已经完成的工作,因此效率极高。
  1. 共轭梯度法的构造
    共轭方向法需要一个预先给定的共轭方向集。共轭梯度法的巧妙之处在于,它在迭代过程中动态地生成这些共轭方向,而无需预先计算和存储所有方向。
    • 方向生成:它利用当前步的残差(最速下降方向)和上一步的搜索方向,通过一个特定的组合来生成新的搜索方向,这个组合保证了新方向与之前所有方向都是A-共轭的。
    • 具体算法步骤
  2. 初始化:给定初始解 \(\mathbf{x}_0\),计算初始残差 \(\mathbf{r}_0 = \mathbf{b} - A\mathbf{x}_0\),并令第一个搜索方向 \(\mathbf{d}_0 = \mathbf{r}_0\)
    2. 对于 k = 0, 1, 2, ... 直到收敛,执行
    a. 计算步长\(\alpha_k = \frac{\mathbf{r}_k^{T} \mathbf{r}_k}{\mathbf{d}_k^{T} A \mathbf{d}_k}\)(这个公式确保了沿 \(\mathbf{d}_k\) 的一维最小化)。
    b. 更新解\(\mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{d}_k\)
    c. 更新残差\(\mathbf{r}_{k+1} = \mathbf{r}_k - \alpha_k A \mathbf{d}_k\)
    d. 计算组合系数\(\beta_k = \frac{\mathbf{r}_{k+1}^{T} \mathbf{r}_{k+1}}{\mathbf{r}_k^{T} \mathbf{r}_k}\)
    e. 生成新的共轭方向\(\mathbf{d}_{k+1} = \mathbf{r}_{k+1} + \beta_k \mathbf{d}_k\)
  • 原理:步骤e是核心。它将当前的最速下降方向(\(\mathbf{r}_{k+1}\))与上一步的方向(\(\mathbf{d}_k\))进行组合,系数 \(\beta_k\) 的设计精确地保证了 \(\mathbf{d}_{k+1}\)\(\mathbf{d}_k\) 是A-共轭的(实际上也与所有之前的 \(\mathbf{d}_i\) 共轭)。
  1. 重要特性与优势
  • 有限步终止性:在精确算术下,共轭梯度法最多经过 \(n\) 次迭代即可得到精确解。
    • 迭代法特性:对于大型问题(n非常大),我们通常不需要精确解。共轭梯度法作为一种迭代法,其解在早期迭代中就可能足够精确。误差的范数会单调下降。
  • 超线性收敛:其收敛速度比最速下降法快得多,是超线性的。收敛速度取决于矩阵 \(A\) 的特征值分布。如果特征值聚集在几个值附近,收敛会非常快。
  • 低存储需求:算法只需存储几个向量(如 \(\mathbf{x}, \mathbf{r}, \mathbf{d}, A\mathbf{d}\)),非常适合求解大规模稀疏问题,因为矩阵 \(A\) 本身可以不用显式存储,只需能计算矩阵-向量乘积 \(A\mathbf{v}\) 即可。

总结来说,共轭梯度法通过将最速下降方向巧妙地组合成一组A-共轭的搜索方向,将求解线性方程组转化为一系列一维优化问题,从而高效地找到二次函数的最小值点。它兼具理论上的有限步收敛性和实际应用中的高效迭代特性,是计算数学中处理大型稀疏对称正定系统的核心算法之一。

共轭梯度法 共轭梯度法是一种用于求解大型稀疏线性方程组的迭代算法,尤其适用于对称正定矩阵。我将从基础概念开始,逐步解释其原理和步骤。 问题背景与基本思想 我们考虑线性方程组 \( A\mathbf{x} = \mathbf{b} \),其中 \( A \) 是一个 \( n \times n \) 的对称正定矩阵,\( \mathbf{b} \) 是已知向量,\( \mathbf{x} \) 是待求解的未知向量。 对称正定矩阵 :满足 \( A = A^{T} \) 且对所有非零向量 \( \mathbf{z} \) 有 \( \mathbf{z}^{T}A\mathbf{z} > 0 \)。这个性质保证了方程组有唯一解。 核心思想转换 :求解 \( A\mathbf{x} = \mathbf{b} \) 可以等价于最小化一个二次函数:\( f(\mathbf{x}) = \frac{1}{2} \mathbf{x}^{T} A \mathbf{x} - \mathbf{b}^{T} \mathbf{x} \)。可以验证,函数 \( f(\mathbf{x}) \) 的梯度(一阶导数向量)为 \( \nabla f(\mathbf{x}) = A\mathbf{x} - \mathbf{b} \)。因此,令梯度为零向量(求极小值点)正好对应了原方程 \( A\mathbf{x} = \mathbf{b} \)。 几何直观 :这个二次函数的等高面是n维空间中的椭球。最小值点就是这个椭球的中心。 最速下降法及其缺陷 一个最直观的迭代最小化方法是 最速下降法 :从某个初始猜测 \( \mathbf{x}_ 0 \) 开始,在每一步都沿着当前点梯度(即残差 \( \mathbf{r} = \mathbf{b} - A\mathbf{x} \) 的负方向)下降,因为这是函数值下降最快的方向。 步骤 : 计算残差:\( \mathbf{r}_ k = \mathbf{b} - A \mathbf{x}_ k \)。 沿残差方向移动:\( \mathbf{x}_ {k+1} = \mathbf{x}_ k + \alpha_ k \mathbf{r}_ k \)。 选择步长 \( \alpha_ k \) 使得 \( f(\mathbf{x}_ {k+1}) \) 最小化。 缺陷 :虽然每一步都沿局部最速方向下降,但整个路径可能是锯齿形的,收敛速度可能很慢,特别是在问题的条件数(矩阵特征值分布的比例)很大时。 共轭方向法 共轭梯度法是共轭方向法的一种。为了克服最速下降法的锯齿现象,我们引入“共轭”的概念。 A-共轭 :两个向量 \( \mathbf{d}_ i \) 和 \( \mathbf{d}_ j \) 关于矩阵 \( A \) 是共轭的(或称A-正交),如果满足 \( \mathbf{d}_ i^{T} A \mathbf{d}_ j = 0 \)(当 \( i \neq j \) 时)。 关键性质 :如果我们有一组彼此A-共轭的搜索方向 \( \{\mathbf{d}_ 0, \mathbf{d} 1, ..., \mathbf{d} {n-1}\} \),那么沿着这些方向依次进行一维精确搜索(寻找最优步长),可以在最多 \( n \) 步内精确得到方程组的解。 几何解释 :在二次函数的等高面(椭球)空间中,A-共轭方向是相互“正交”的。沿着这些方向搜索,每一步都会精确地消除误差在某个维度上的分量,不会破坏之前步骤已经完成的工作,因此效率极高。 共轭梯度法的构造 共轭方向法需要一个预先给定的共轭方向集。共轭梯度法的巧妙之处在于,它 在迭代过程中动态地生成这些共轭方向 ,而无需预先计算和存储所有方向。 方向生成 :它利用当前步的残差(最速下降方向)和上一步的搜索方向,通过一个特定的组合来生成新的搜索方向,这个组合保证了新方向与之前所有方向都是A-共轭的。 具体算法步骤 : 初始化 :给定初始解 \( \mathbf{x}_ 0 \),计算初始残差 \( \mathbf{r}_ 0 = \mathbf{b} - A\mathbf{x}_ 0 \),并令第一个搜索方向 \( \mathbf{d}_ 0 = \mathbf{r}_ 0 \)。 对于 k = 0, 1, 2, ... 直到收敛,执行 : a. 计算步长 :\( \alpha_ k = \frac{\mathbf{r}_ k^{T} \mathbf{r}_ k}{\mathbf{d}_ k^{T} A \mathbf{d}_ k} \)(这个公式确保了沿 \( \mathbf{d} k \) 的一维最小化)。 b. 更新解 :\( \mathbf{x} {k+1} = \mathbf{x}_ k + \alpha_ k \mathbf{d} k \)。 c. 更新残差 :\( \mathbf{r} {k+1} = \mathbf{r} k - \alpha_ k A \mathbf{d} k \)。 d. 计算组合系数 :\( \beta_ k = \frac{\mathbf{r} {k+1}^{T} \mathbf{r} {k+1}}{\mathbf{r} k^{T} \mathbf{r} k} \)。 e. 生成新的共轭方向 :\( \mathbf{d} {k+1} = \mathbf{r} {k+1} + \beta_ k \mathbf{d}_ k \)。 原理 :步骤e是核心。它将当前的最速下降方向(\( \mathbf{r}_ {k+1} \))与上一步的方向(\( \mathbf{d} k \))进行组合,系数 \( \beta_ k \) 的设计精确地保证了 \( \mathbf{d} {k+1} \) 与 \( \mathbf{d}_ k \) 是A-共轭的(实际上也与所有之前的 \( \mathbf{d}_ i \) 共轭)。 重要特性与优势 有限步终止性 :在精确算术下,共轭梯度法最多经过 \( n \) 次迭代即可得到精确解。 迭代法特性 :对于大型问题(n非常大),我们通常不需要精确解。共轭梯度法作为一种迭代法,其解在早期迭代中就可能足够精确。误差的范数会单调下降。 超线性收敛 :其收敛速度比最速下降法快得多,是超线性的。收敛速度取决于矩阵 \( A \) 的特征值分布。如果特征值聚集在几个值附近,收敛会非常快。 低存储需求 :算法只需存储几个向量(如 \( \mathbf{x}, \mathbf{r}, \mathbf{d}, A\mathbf{d} \)),非常适合求解大规模稀疏问题,因为矩阵 \( A \) 本身可以不用显式存储,只需能计算矩阵-向量乘积 \( A\mathbf{v} \) 即可。 总结来说,共轭梯度法通过将最速下降方向巧妙地组合成一组A-共轭的搜索方向,将求解线性方程组转化为一系列一维优化问题,从而高效地找到二次函数的最小值点。它兼具理论上的有限步收敛性和实际应用中的高效迭代特性,是计算数学中处理大型稀疏对称正定系统的核心算法之一。