基于Chebyshev加速的对称逐次超松弛迭代法(Chebyshev-SSOR)求解对称正定线性方程组
字数 8107 2025-12-20 16:39:22

基于Chebyshev加速的对称逐次超松弛迭代法(Chebyshev-SSOR)求解对称正定线性方程组

算法描述

本题目介绍Chebyshev加速的对称逐次超松弛迭代法(Chebyshev-SSOR),用于高效求解大规模稀疏对称正定线性方程组 \(A\mathbf{x} = \mathbf{b}\),其中 \(A \in \mathbb{R}^{n \times n}\) 对称正定, \(\mathbf{x}, \mathbf{b} \in \mathbb{R}^{n}\)。该方法结合了对称逐次超松弛(SSOR)作为内迭代(预处理/平滑器),以及基于切比雪夫多项式的最优参数选择的外迭代(加速),以显著提高经典SSOR迭代法的收敛速度。与共轭梯度法(CG)不同,该方法不依赖于正交性条件,在某些并行计算场景或当矩阵条件数可以较好估计时具有优势。

我们的目标是求解 \(\mathbf{x}_* = A^{-1} \mathbf{b}\)。记初始猜测为 \(\mathbf{x}^{(0)}\),迭代格式将生成序列 \(\{\mathbf{x}^{(k)}\}\) 以逼近 \(\mathbf{x}_*\)


解题过程

步骤1:回顾对称逐次超松弛(SSOR)迭代

SSOR是求解 \(A\mathbf{x} = \mathbf{b}\) 的一种经典定常迭代法,适用于对称矩阵。它由两个半步组成:

首先,将矩阵 \(A\) 分解为 \(A = D - L - L^T\),其中 \(D\) 是对角部分(假设 \(D\) 的对角元非零), \(-L\) 是严格下三角部分。

给定第 \(k\) 次迭代的近似解 \(\mathbf{x}^{(k)}\),SSOR迭代计算 \(\mathbf{x}^{(k+1)}\) 如下:

  1. 前向SOR步(Forward SOR):对 \(i = 1, 2, ..., n\) 顺序计算:

\[ x_i^{(k+\frac{1}{2})} = (1-\omega)x_i^{(k)} + \frac{\omega}{a_{ii}} \left( b_i - \sum_{j=1}^{i-1} a_{ij} x_j^{(k+\frac{1}{2})} - \sum_{j=i+1}^{n} a_{ij} x_j^{(k)} \right) \]

这里 $ \omega \in (0, 2) $ 是松弛参数。此步用到了刚更新出的分量 $ x_j^{(k+\frac{1}{2})} $(当 $ j < i $)。
  1. 后向SOR步(Backward SOR):对 \(i = n, n-1, ..., 1\) 逆序计算:

\[ x_i^{(k+1)} = (1-\omega)x_i^{(k+\frac{1}{2})} + \frac{\omega}{a_{ii}} \left( b_i - \sum_{j=1}^{i-1} a_{ij} x_j^{(k+\frac{1}{2})} - \sum_{j=i+1}^{n} a_{ij} x_j^{(k+1)} \right) \]

此步用到了刚更新出的分量 $ x_j^{(k+1)} $(当 $ j > i $)。

这两个步骤合起来称为一次SSOR迭代。将其写成矩阵形式更为简洁。定义 \(M_{SSOR}\) 为SSOR迭代的迭代矩阵,其计算格式可以等价地写为:

\[\mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + M_{SSOR}^{-1} (\mathbf{b} - A\mathbf{x}^{(k)}) \]

其中,

\[M_{SSOR} = \frac{1}{\omega(2-\omega)} (D - \omega L) D^{-1} (D - \omega L^T) \]

这里 \(M_{SSOR}\) 对称正定(当 \(A\) 对称正定且 \(0 < \omega < 2\))。因此,SSOR迭代也可视为用 \(M_{SSOR}\) 作为预处理子的不动点迭代。

步骤2:引入Chebyshev加速(多项式加速)

定常迭代法(如SSOR)的收敛速度由其迭代矩阵的谱半径决定。Chebyshev加速是一种非定常迭代法,它通过组合前几次迭代的信息,以在每次迭代中最小化某种误差范数,从而达到比原始定常迭代更快的收敛速度。

核心思想:将第 \(k\) 次迭代的解表示为初始残差的多项式形式,并选择多项式系数使得误差在某种意义下最小化。

设我们有一个基本的一阶定常迭代格式(如SSOR):

\[\mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + M^{-1} (\mathbf{b} - A\mathbf{x}^{(k)}) = \mathbf{x}^{(k)} + M^{-1} \mathbf{r}^{(k)} \]

其中 \(M\) 是迭代矩阵(对于SSOR, \(M = M_{SSOR}\)), \(\mathbf{r}^{(k)} = \mathbf{b} - A\mathbf{x}^{(k)}\) 是残差。

这个格式可以改写为误差方程。令 \(\mathbf{e}^{(k)} = \mathbf{x}_* - \mathbf{x}^{(k)}\) 为误差向量。则

\[\mathbf{e}^{(k+1)} = (I - M^{-1}A) \mathbf{e}^{(k)} = G \mathbf{e}^{(k)} \]

其中 \(G = I - M^{-1}A\)误差传播矩阵(iteration matrix)。经过 \(k\) 步迭代后,误差满足:

\[\mathbf{e}^{(k)} = G^k \mathbf{e}^{(0)} \]

Chebyshev加速的目标:不直接使用 \(G^k\),而是寻找一个 \(k\) 次多项式 \(P_k(\lambda)\) 满足 \(P_k(0) = 1\),并用 \(P_k(G) \mathbf{e}^{(0)}\) 来近似误差,使得在某种范数下 \(\| P_k(G) \mathbf{e}^{(0)} \|\) 尽可能小。由于我们不知道 \(\mathbf{e}^{(0)}\),这通常通过构造一个关于残差的递推格式来实现。

在实际应用中,假设矩阵 \(M^{-1}A\) 的特征值位于正实数区间 \([ \alpha, \beta ]\) 内,其中 \(0 < \alpha \le \beta\)。对于SSOR预处理,当 \(A\) 对称正定时, \(M_{SSOR}^{-1}A\) 的特征值是正的,且区间 \([\alpha, \beta]\) 可以估计(有时取 \(\alpha = \lambda_{\min}(M^{-1}A)\), \(\beta = \lambda_{\max}(M^{-1}A)\))。

步骤3:构建Chebyshev加速迭代格式

Chebyshev加速迭代的标准三项递推格式如下:

给定初始猜测 \(\mathbf{x}^{(0)}\),计算 \(\mathbf{x}^{(1)}\) 通常先进行一次基本迭代(如SSOR):

\[\mathbf{x}^{(1)} = \mathbf{x}^{(0)} + M^{-1} \mathbf{r}^{(0)}, \quad \mathbf{r}^{(0)} = \mathbf{b} - A\mathbf{x}^{(0)} \]

然后,对于 \(k \ge 1\),迭代格式为:

\[\mathbf{x}^{(k+1)} = \rho_k \left[ \mathbf{x}^{(k)} + M^{-1} \mathbf{r}^{(k)} - \mathbf{x}^{(k-1)} \right] + \mathbf{x}^{(k-1)} \]

其中系数 \(\rho_k\) 由以下公式给出:

\[\rho_k = \left( 1 - \frac{\mu}{2} C_{k-1}(\mu) / C_{k}(\mu) \right)^{-1} \]

这里 \(C_k(t)\)\(k\) 次第一类切比雪夫多项式, \(\mu = \frac{\beta - \alpha}{\beta + \alpha}\)

更常用的等价形式(避免直接计算切比雪夫多项式比值)是利用三项递推关系计算系数。定义:

\[\delta = \frac{\beta - \alpha}{\beta + \alpha}, \quad \gamma = \frac{2}{\beta + \alpha} \]

则迭代格式可写为:

  1. 初始化:

\[ \mathbf{x}^{(1)} = \mathbf{x}^{(0)} + \gamma M^{-1} \mathbf{r}^{(0)} \]

注意这里使用了初始缩放因子 \(\gamma\),它对应于将特征值区间映射到 \([-1, 1]\) 相关的参数。

  1. \(k = 1, 2, ...\) 进行迭代,直到收敛:
    a. 计算残差: \(\mathbf{r}^{(k)} = \mathbf{b} - A\mathbf{x}^{(k)}\)
    b. 计算预处理残差: \(\mathbf{z}^{(k)} = M^{-1} \mathbf{r}^{(k)}\)
    c. 更新解:

\[ \mathbf{x}^{(k+1)} = \frac{4}{(2 - \mu^2)\rho_k - 2} \left( \gamma \mathbf{z}^{(k)} + \mathbf{x}^{(k)} - \mathbf{x}^{(k-1)} \right) + \mathbf{x}^{(k-1)} \]

其中 \(\rho_k = 1 / (1 - \frac{\mu^2}{4} \rho_{k-1})\)\(\rho_0 = 2\)\(\mu = \delta\)。这个系数递推来自切比雪夫多项式在 \([-1,1]\) 上的最小最大性质。

在实际编程中,更常见的实现是以下简化形式(通过变量替换得到):

\(\theta = \frac{\beta + \alpha}{2}\), \(\delta = \frac{\beta - \alpha}{2}\)。则令 \(\rho_0 = 1/\theta\)。对 \(k=0,1,2,...\)

  1. 如果 \(k=0\)

\[ \mathbf{x}^{(1)} = \mathbf{x}^{(0)} + \rho_0 M^{-1} \mathbf{r}^{(0)} \]

  1. 否则(\(k \ge 1\)):

\[ \rho_k = \frac{1}{\theta - \frac{\delta^2}{4} \rho_{k-1}} \]

\[ \mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + \rho_k \left( M^{-1} \mathbf{r}^{(k)} + \frac{\rho_{k-1} \delta^2}{4} (\mathbf{x}^{(k)} - \mathbf{x}^{(k-1)}) \right) \]

这个形式更容易实现,它直接由切比雪夫多项式的三项递推导出。

步骤4:将SSOR作为内迭代(预处理子)

在Chebyshev-SSOR中,每一步迭代都需要计算 \(\mathbf{z} = M^{-1} \mathbf{r}\),即求解 \(M \mathbf{z} = \mathbf{r}\)。由于我们选择 \(M = M_{SSOR}\),而 \(M_{SSOR} = \frac{1}{\omega(2-\omega)} (D - \omega L) D^{-1} (D - \omega L^T)\),求解 \(M \mathbf{z} = \mathbf{r}\) 等价于执行一次SSOR迭代(从零初始解开始,右端项为 \(\mathbf{r}\))。

具体来说,给定向量 \(\mathbf{r}\),计算 \(\mathbf{z} = M_{SSOR}^{-1} \mathbf{r}\) 的步骤如下(这本质上是解 \(M_{SSOR} \mathbf{z} = \mathbf{r}\)):

  1. 前向代入:解 \((D - \omega L) \mathbf{y} = \omega(2-\omega) \mathbf{r}\) 得到 \(\mathbf{y}\)
    • 因为 \(D - \omega L\) 是下三角矩阵,可以通过前向代入快速求解:

\[ y_i = \omega(2-\omega) r_i + \omega \sum_{j=1}^{i-1} a_{ij} y_j, \quad i=1,...,n \]

  1. 缩放:计算 \(\mathbf{v} = D^{-1} \mathbf{y}\),即 \(v_i = y_i / a_{ii}\)

  2. 后向代入:解 \((D - \omega L^T) \mathbf{z} = D \mathbf{v}\) 得到 \(\mathbf{z}\)

    • 因为 \(D - \omega L^T\) 是上三角矩阵,可以通过后向代入求解:

\[ z_i = v_i + \frac{\omega}{a_{ii}} \sum_{j=i+1}^{n} a_{ij} z_j, \quad i=n,...,1 \]

注意:在实际迭代中,残差向量 \(\mathbf{r}^{(k)}\) 是已知的,我们通过以上三步计算出 \(\mathbf{z}^{(k)} = M_{SSOR}^{-1} \mathbf{r}^{(k)}\),然后代入Chebyshev加速的更新公式。

步骤5:完整算法流程与参数选择

  1. 输入:对称正定矩阵 \(A \in \mathbb{R}^{n \times n}\),右端项 \(\mathbf{b} \in \mathbb{R}^n\),初始猜测 \(\mathbf{x}^{(0)}\)(可设为零向量),松弛参数 \(\omega\)(通常取 \(1 < \omega < 2\),如1.2, 1.5等,需实验调整),迭代次数上限 \(K_{max}\),容差 \(\epsilon\)
  2. 估计特征值边界:需要估计 \(M_{SSOR}^{-1}A\) 的特征值区间 \([\alpha, \beta]\)。这是一项挑战。常用方法包括:
    • 通过若干步Lanczos迭代估计最大、最小特征值。
    • 利用矩阵的性质给出理论界。例如,对于某些模型问题(如泊松方程离散),区间是已知的。
    • 经验取值:有时取 \(\alpha = 0.1 \lambda_{\min}(A)\), \(\beta = \lambda_{\max}(A)\) 的粗略估计,然后通过试验微调。
    • 如果难以估计,可退化为使用固定参数(此时退化为某种多项式加速,但非最优)。
  3. 计算常数

\[ \theta = \frac{\beta + \alpha}{2}, \quad \delta = \frac{\beta - \alpha}{2}, \quad \rho_0 = 1/\theta \]

  1. 初始化
    • 计算初始残差: \(\mathbf{r}^{(0)} = \mathbf{b} - A\mathbf{x}^{(0)}\)
    • 用SSOR作为预处理子求解: \(\mathbf{z}^{(0)} = M_{SSOR}^{-1} \mathbf{r}^{(0)}\)(即执行步骤4中的三步计算)。
    • 更新解: \(\mathbf{x}^{(1)} = \mathbf{x}^{(0)} + \rho_0 \mathbf{z}^{(0)}\)
    • 计算新残差: \(\mathbf{r}^{(1)} = \mathbf{b} - A\mathbf{x}^{(1)}\)
    • 设置 \(k = 1\)
  2. 迭代主循环:当 \(\|\mathbf{r}^{(k)}\| / \|\mathbf{b}\| > \epsilon\)\(k < K_{max}\) 时:
    a. 计算预处理残差: \(\mathbf{z}^{(k)} = M_{SSOR}^{-1} \mathbf{r}^{(k)}\)
    b. 计算Chebyshev系数: \(\rho_k = \frac{1}{\theta - \frac{\delta^2}{4} \rho_{k-1}}\)
    c. 更新解:

\[ \mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + \rho_k \left( \mathbf{z}^{(k)} + \frac{\rho_{k-1} \delta^2}{4} (\mathbf{x}^{(k)} - \mathbf{x}^{(k-1)}) \right) \]

d. 计算新残差: $ \mathbf{r}^{(k+1)} = \mathbf{b} - A\mathbf{x}^{(k+1)} $。
e. $ k = k + 1 $。
  1. 输出:近似解 \(\mathbf{x}^{(k)}\)

步骤6:算法特点与小结

  • 加速效果:相比经典SSOR迭代,Chebyshev加速能显著减少迭代次数,特别是当 \(M^{-1}A\) 的特征值分布较为集中时(即 \(\alpha\)\(\beta\) 接近)。其收敛速度与 \(\frac{\sqrt{\beta/\alpha} - 1}{\sqrt{\beta/\alpha} + 1}\) 相关,类似于预处理共轭梯度法(PCG),但无需计算内积,在某些并行架构上可能更有优势。
  • 参数依赖:算法性能严重依赖于特征值区间 \([\alpha, \beta]\) 估计的准确性。过高估计 \(\beta/\alpha\) 比值会减慢收敛;而低估可能导致算法不稳定(参数 \(\rho_k\) 可能发散)。通常需要保守估计,确保区间包含所有特征值。
  • 与CG对比:对于对称正定问题,预处理共轭梯度法(PCG)通常收敛更快且对特征值区间估计不敏感。但Chebyshev加速无需计算向量内积,避免了全局通信,在极端大规模并行计算中有时被采用。
  • 适用性:特别适用于特征值边界已知或容易估计的问题(如来自规则网格离散的偏微分方程),且当SSOR是一个有效的平滑器或预处理子时。

通过以上步骤,我们将SSOR的稳定性和Chebyshev多项式的最优逼近性质结合,得到了一个高效、适合于求解大规模稀疏对称正定线性方程组的迭代算法。

基于Chebyshev加速的对称逐次超松弛迭代法(Chebyshev-SSOR)求解对称正定线性方程组 算法描述 本题目介绍Chebyshev加速的对称逐次超松弛迭代法(Chebyshev-SSOR),用于高效求解大规模稀疏对称正定线性方程组 \( A\mathbf{x} = \mathbf{b} \),其中 \( A \in \mathbb{R}^{n \times n} \) 对称正定, \( \mathbf{x}, \mathbf{b} \in \mathbb{R}^{n} \)。该方法结合了对称逐次超松弛(SSOR)作为 内迭代 (预处理/平滑器),以及基于切比雪夫多项式的最优参数选择的 外迭代 (加速),以显著提高经典SSOR迭代法的收敛速度。与共轭梯度法(CG)不同,该方法不依赖于正交性条件,在某些并行计算场景或当矩阵条件数可以较好估计时具有优势。 我们的目标是求解 \( \mathbf{x} * = A^{-1} \mathbf{b} \)。记初始猜测为 \( \mathbf{x}^{(0)} \),迭代格式将生成序列 \( \{\mathbf{x}^{(k)}\} \) 以逼近 \( \mathbf{x} * \)。 解题过程 步骤1:回顾对称逐次超松弛(SSOR)迭代 SSOR是求解 \( A\mathbf{x} = \mathbf{b} \) 的一种经典定常迭代法,适用于对称矩阵。它由两个半步组成: 首先,将矩阵 \( A \) 分解为 \( A = D - L - L^T \),其中 \( D \) 是对角部分(假设 \( D \) 的对角元非零), \( -L \) 是严格下三角部分。 给定第 \( k \) 次迭代的近似解 \( \mathbf{x}^{(k)} \),SSOR迭代计算 \( \mathbf{x}^{(k+1)} \) 如下: 前向SOR步 (Forward SOR):对 \( i = 1, 2, ..., n \) 顺序计算: \[ x_ i^{(k+\frac{1}{2})} = (1-\omega)x_ i^{(k)} + \frac{\omega}{a_ {ii}} \left( b_ i - \sum_ {j=1}^{i-1} a_ {ij} x_ j^{(k+\frac{1}{2})} - \sum_ {j=i+1}^{n} a_ {ij} x_ j^{(k)} \right) \] 这里 \( \omega \in (0, 2) \) 是松弛参数。此步用到了刚更新出的分量 \( x_ j^{(k+\frac{1}{2})} \)(当 \( j < i \))。 后向SOR步 (Backward SOR):对 \( i = n, n-1, ..., 1 \) 逆序计算: \[ x_ i^{(k+1)} = (1-\omega)x_ i^{(k+\frac{1}{2})} + \frac{\omega}{a_ {ii}} \left( b_ i - \sum_ {j=1}^{i-1} a_ {ij} x_ j^{(k+\frac{1}{2})} - \sum_ {j=i+1}^{n} a_ {ij} x_ j^{(k+1)} \right) \] 此步用到了刚更新出的分量 \( x_ j^{(k+1)} \)(当 \( j > i \))。 这两个步骤合起来称为一次SSOR迭代。将其写成矩阵形式更为简洁。定义 \( M_ {SSOR} \) 为SSOR迭代的迭代矩阵,其计算格式可以等价地写为: \[ \mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + M_ {SSOR}^{-1} (\mathbf{b} - A\mathbf{x}^{(k)}) \] 其中, \[ M_ {SSOR} = \frac{1}{\omega(2-\omega)} (D - \omega L) D^{-1} (D - \omega L^T) \] 这里 \( M_ {SSOR} \) 对称正定(当 \( A \) 对称正定且 \( 0 < \omega < 2 \))。因此,SSOR迭代也可视为用 \( M_ {SSOR} \) 作为预处理子的不动点迭代。 步骤2:引入Chebyshev加速(多项式加速) 定常迭代法(如SSOR)的收敛速度由其迭代矩阵的谱半径决定。Chebyshev加速是一种 非定常 迭代法,它通过组合前几次迭代的信息,以在每次迭代中最小化某种误差范数,从而达到比原始定常迭代更快的收敛速度。 核心思想:将第 \( k \) 次迭代的解表示为初始残差的多项式形式,并选择多项式系数使得误差在某种意义下最小化。 设我们有一个基本的一阶定常迭代格式(如SSOR): \[ \mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + M^{-1} (\mathbf{b} - A\mathbf{x}^{(k)}) = \mathbf{x}^{(k)} + M^{-1} \mathbf{r}^{(k)} \] 其中 \( M \) 是迭代矩阵(对于SSOR, \( M = M_ {SSOR} \)), \( \mathbf{r}^{(k)} = \mathbf{b} - A\mathbf{x}^{(k)} \) 是残差。 这个格式可以改写为误差方程。令 \( \mathbf{e}^{(k)} = \mathbf{x}_ * - \mathbf{x}^{(k)} \) 为误差向量。则 \[ \mathbf{e}^{(k+1)} = (I - M^{-1}A) \mathbf{e}^{(k)} = G \mathbf{e}^{(k)} \] 其中 \( G = I - M^{-1}A \) 是 误差传播矩阵 (iteration matrix)。经过 \( k \) 步迭代后,误差满足: \[ \mathbf{e}^{(k)} = G^k \mathbf{e}^{(0)} \] Chebyshev加速的目标 :不直接使用 \( G^k \),而是寻找一个 \( k \) 次多项式 \( P_ k(\lambda) \) 满足 \( P_ k(0) = 1 \),并用 \( P_ k(G) \mathbf{e}^{(0)} \) 来近似误差,使得在某种范数下 \( \| P_ k(G) \mathbf{e}^{(0)} \| \) 尽可能小。由于我们不知道 \( \mathbf{e}^{(0)} \),这通常通过构造一个关于残差的递推格式来实现。 在实际应用中,假设矩阵 \( M^{-1}A \) 的特征值位于正实数区间 \([ \alpha, \beta ]\) 内,其中 \( 0 < \alpha \le \beta \)。对于SSOR预处理,当 \( A \) 对称正定时, \( M_ {SSOR}^{-1}A \) 的特征值是正的,且区间 \([ \alpha, \beta]\) 可以估计(有时取 \( \alpha = \lambda_ {\min}(M^{-1}A) \), \( \beta = \lambda_ {\max}(M^{-1}A) \))。 步骤3:构建Chebyshev加速迭代格式 Chebyshev加速迭代的标准三项递推格式如下: 给定初始猜测 \( \mathbf{x}^{(0)} \),计算 \( \mathbf{x}^{(1)} \) 通常先进行一次基本迭代(如SSOR): \[ \mathbf{x}^{(1)} = \mathbf{x}^{(0)} + M^{-1} \mathbf{r}^{(0)}, \quad \mathbf{r}^{(0)} = \mathbf{b} - A\mathbf{x}^{(0)} \] 然后,对于 \( k \ge 1 \),迭代格式为: \[ \mathbf{x}^{(k+1)} = \rho_ k \left[ \mathbf{x}^{(k)} + M^{-1} \mathbf{r}^{(k)} - \mathbf{x}^{(k-1)} \right ] + \mathbf{x}^{(k-1)} \] 其中系数 \( \rho_ k \) 由以下公式给出: \[ \rho_ k = \left( 1 - \frac{\mu}{2} C_ {k-1}(\mu) / C_ {k}(\mu) \right)^{-1} \] 这里 \( C_ k(t) \) 是 \( k \) 次第一类切比雪夫多项式, \( \mu = \frac{\beta - \alpha}{\beta + \alpha} \)。 更常用的等价形式(避免直接计算切比雪夫多项式比值)是利用三项递推关系计算系数。定义: \[ \delta = \frac{\beta - \alpha}{\beta + \alpha}, \quad \gamma = \frac{2}{\beta + \alpha} \] 则迭代格式可写为: 初始化: \[ \mathbf{x}^{(1)} = \mathbf{x}^{(0)} + \gamma M^{-1} \mathbf{r}^{(0)} \] 注意这里使用了初始缩放因子 \( \gamma \),它对应于将特征值区间映射到 \([ -1, 1 ]\) 相关的参数。 对 \( k = 1, 2, ... \) 进行迭代,直到收敛: a. 计算残差: \( \mathbf{r}^{(k)} = \mathbf{b} - A\mathbf{x}^{(k)} \) b. 计算预处理残差: \( \mathbf{z}^{(k)} = M^{-1} \mathbf{r}^{(k)} \) c. 更新解: \[ \mathbf{x}^{(k+1)} = \frac{4}{(2 - \mu^2)\rho_ k - 2} \left( \gamma \mathbf{z}^{(k)} + \mathbf{x}^{(k)} - \mathbf{x}^{(k-1)} \right) + \mathbf{x}^{(k-1)} \] 其中 \( \rho_ k = 1 / (1 - \frac{\mu^2}{4} \rho_ {k-1}) \), \( \rho_ 0 = 2 \), \( \mu = \delta \)。这个系数递推来自切比雪夫多项式在 \([ -1,1 ]\) 上的最小最大性质。 在实际编程中,更常见的实现是以下简化形式(通过变量替换得到): 设 \( \theta = \frac{\beta + \alpha}{2} \), \( \delta = \frac{\beta - \alpha}{2} \)。则令 \( \rho_ 0 = 1/\theta \)。对 \( k=0,1,2,... \): 如果 \( k=0 \): \[ \mathbf{x}^{(1)} = \mathbf{x}^{(0)} + \rho_ 0 M^{-1} \mathbf{r}^{(0)} \] 否则(\( k \ge 1 \)): \[ \rho_ k = \frac{1}{\theta - \frac{\delta^2}{4} \rho_ {k-1}} \] \[ \mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + \rho_ k \left( M^{-1} \mathbf{r}^{(k)} + \frac{\rho_ {k-1} \delta^2}{4} (\mathbf{x}^{(k)} - \mathbf{x}^{(k-1)}) \right) \] 这个形式更容易实现,它直接由切比雪夫多项式的三项递推导出。 步骤4:将SSOR作为内迭代(预处理子) 在Chebyshev-SSOR中,每一步迭代都需要计算 \( \mathbf{z} = M^{-1} \mathbf{r} \),即求解 \( M \mathbf{z} = \mathbf{r} \)。由于我们选择 \( M = M_ {SSOR} \),而 \( M_ {SSOR} = \frac{1}{\omega(2-\omega)} (D - \omega L) D^{-1} (D - \omega L^T) \),求解 \( M \mathbf{z} = \mathbf{r} \) 等价于执行一次SSOR迭代(从零初始解开始,右端项为 \( \mathbf{r} \))。 具体来说,给定向量 \( \mathbf{r} \),计算 \( \mathbf{z} = M_ {SSOR}^{-1} \mathbf{r} \) 的步骤如下(这本质上是解 \( M_ {SSOR} \mathbf{z} = \mathbf{r} \)): 前向代入:解 \( (D - \omega L) \mathbf{y} = \omega(2-\omega) \mathbf{r} \) 得到 \( \mathbf{y} \)。 因为 \( D - \omega L \) 是下三角矩阵,可以通过前向代入快速求解: \[ y_ i = \omega(2-\omega) r_ i + \omega \sum_ {j=1}^{i-1} a_ {ij} y_ j, \quad i=1,...,n \] 缩放:计算 \( \mathbf{v} = D^{-1} \mathbf{y} \),即 \( v_ i = y_ i / a_ {ii} \)。 后向代入:解 \( (D - \omega L^T) \mathbf{z} = D \mathbf{v} \) 得到 \( \mathbf{z} \)。 因为 \( D - \omega L^T \) 是上三角矩阵,可以通过后向代入求解: \[ z_ i = v_ i + \frac{\omega}{a_ {ii}} \sum_ {j=i+1}^{n} a_ {ij} z_ j, \quad i=n,...,1 \] 注意:在实际迭代中,残差向量 \( \mathbf{r}^{(k)} \) 是已知的,我们通过以上三步计算出 \( \mathbf{z}^{(k)} = M_ {SSOR}^{-1} \mathbf{r}^{(k)} \),然后代入Chebyshev加速的更新公式。 步骤5:完整算法流程与参数选择 输入 :对称正定矩阵 \( A \in \mathbb{R}^{n \times n} \),右端项 \( \mathbf{b} \in \mathbb{R}^n \),初始猜测 \( \mathbf{x}^{(0)} \)(可设为零向量),松弛参数 \( \omega \)(通常取 \( 1 < \omega < 2 \),如1.2, 1.5等,需实验调整),迭代次数上限 \( K_ {max} \),容差 \( \epsilon \)。 估计特征值边界 :需要估计 \( M_ {SSOR}^{-1}A \) 的特征值区间 \( [ \alpha, \beta ] \)。这是一项挑战。常用方法包括: 通过若干步Lanczos迭代估计最大、最小特征值。 利用矩阵的性质给出理论界。例如,对于某些模型问题(如泊松方程离散),区间是已知的。 经验取值:有时取 \( \alpha = 0.1 \lambda_ {\min}(A) \), \( \beta = \lambda_ {\max}(A) \) 的粗略估计,然后通过试验微调。 如果难以估计,可退化为使用固定参数(此时退化为某种多项式加速,但非最优)。 计算常数 : \[ \theta = \frac{\beta + \alpha}{2}, \quad \delta = \frac{\beta - \alpha}{2}, \quad \rho_ 0 = 1/\theta \] 初始化 : 计算初始残差: \( \mathbf{r}^{(0)} = \mathbf{b} - A\mathbf{x}^{(0)} \) 用SSOR作为预处理子求解: \( \mathbf{z}^{(0)} = M_ {SSOR}^{-1} \mathbf{r}^{(0)} \)(即执行步骤4中的三步计算)。 更新解: \( \mathbf{x}^{(1)} = \mathbf{x}^{(0)} + \rho_ 0 \mathbf{z}^{(0)} \) 计算新残差: \( \mathbf{r}^{(1)} = \mathbf{b} - A\mathbf{x}^{(1)} \) 设置 \( k = 1 \)。 迭代主循环 :当 \( \|\mathbf{r}^{(k)}\| / \|\mathbf{b}\| > \epsilon \) 且 \( k < K_ {max} \) 时: a. 计算预处理残差: \( \mathbf{z}^{(k)} = M_ {SSOR}^{-1} \mathbf{r}^{(k)} \)。 b. 计算Chebyshev系数: \( \rho_ k = \frac{1}{\theta - \frac{\delta^2}{4} \rho_ {k-1}} \)。 c. 更新解: \[ \mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + \rho_ k \left( \mathbf{z}^{(k)} + \frac{\rho_ {k-1} \delta^2}{4} (\mathbf{x}^{(k)} - \mathbf{x}^{(k-1)}) \right) \] d. 计算新残差: \( \mathbf{r}^{(k+1)} = \mathbf{b} - A\mathbf{x}^{(k+1)} \)。 e. \( k = k + 1 \)。 输出 :近似解 \( \mathbf{x}^{(k)} \)。 步骤6:算法特点与小结 加速效果 :相比经典SSOR迭代,Chebyshev加速能显著减少迭代次数,特别是当 \( M^{-1}A \) 的特征值分布较为集中时(即 \( \alpha \) 和 \( \beta \) 接近)。其收敛速度与 \( \frac{\sqrt{\beta/\alpha} - 1}{\sqrt{\beta/\alpha} + 1} \) 相关,类似于预处理共轭梯度法(PCG),但无需计算内积,在某些并行架构上可能更有优势。 参数依赖 :算法性能严重依赖于特征值区间 \( [ \alpha, \beta] \) 估计的准确性。过高估计 \( \beta/\alpha \) 比值会减慢收敛;而低估可能导致算法不稳定(参数 \( \rho_ k \) 可能发散)。通常需要保守估计,确保区间包含所有特征值。 与CG对比 :对于对称正定问题,预处理共轭梯度法(PCG)通常收敛更快且对特征值区间估计不敏感。但Chebyshev加速无需计算向量内积,避免了全局通信,在极端大规模并行计算中有时被采用。 适用性 :特别适用于特征值边界已知或容易估计的问题(如来自规则网格离散的偏微分方程),且当SSOR是一个有效的平滑器或预处理子时。 通过以上步骤,我们将SSOR的稳定性和Chebyshev多项式的最优逼近性质结合,得到了一个高效、适合于求解大规模稀疏对称正定线性方程组的迭代算法。