分块矩阵的预处理共轭梯度法解对称正定线性方程组
题目描述
考虑对称正定线性方程组 \(A\mathbf{x} = \mathbf{b}\),其中 \(A \in \mathbb{R}^{n \times n}\) 是对称正定矩阵。当 \(A\) 是大型稀疏矩阵时,直接解法(如Cholesky分解)可能因填充现象而效率低下。预处理共轭梯度法(PCG)通过引入预处理子 \(M\) 来加速收敛,其中 \(M\) 近似于 \(A\) 且易于求逆。若 \(A\) 具有分块结构(例如来自偏微分方程离散化),可设计分块预处理子(如分块对角或分块三角预处理)来提升PCG的效率和并行性。本题目要求理解分块预处理子的构造及其在PCG中的应用。
解题过程
- 共轭梯度法基础
CG法用于求解对称正定系统,通过迭代构造共轭搜索方向 \(\mathbf{d}_k\) 和更新解 \(\mathbf{x}_k\)。初始猜测 \(\mathbf{x}_0\) 对应残差 \(\mathbf{r}_0 = \mathbf{b} - A\mathbf{x}_0\)。第 \(k\) 步迭代公式为:
\[ \alpha_k = \frac{\mathbf{r}_k^\top \mathbf{r}_k}{\mathbf{d}_k^\top A \mathbf{d}_k}, \quad \mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{d}_k, \quad \mathbf{r}_{k+1} = \mathbf{r}_k - \alpha_k A \mathbf{d}_k, \quad \beta_k = \frac{\mathbf{r}_{k+1}^\top \mathbf{r}_{k+1}}{\mathbf{r}_k^\top \mathbf{r}_k}, \quad \mathbf{d}_{k+1} = \mathbf{r}_{k+1} + \beta_k \mathbf{d}_k. \]
CG的收敛速度依赖于 \(A\) 的条件数 \(\kappa(A)\):\(\kappa(A)\) 越大,收敛越慢。
- 预处理共轭梯度法原理
预处理的目标是构造一个对称正定矩阵 \(M\),使得 \(M^{-1}A\) 的条件数远小于 \(A\) 的条件数,且 \(M^{-1}\) 易于计算。预处理系统为:
\[ M^{-1}A\mathbf{x} = M^{-1}\mathbf{b}. \]
但需保持对称性:若 \(M\) 对称正定,可分解为 \(M = LL^\top\),则等价系统为 \(L^{-1}AL^{-\top}\tilde{\mathbf{x}} = L^{-1}\mathbf{b}\),其中 \(\tilde{\mathbf{x}} = L^\top \mathbf{x}\)。实际中避免显式分解,通过解 \(M\mathbf{z}_k = \mathbf{r}_k\) 计算预处理残差 \(\mathbf{z}_k\)。PCG算法步骤:
- 初始化 \(\mathbf{x}_0\),计算 \(\mathbf{r}_0 = \mathbf{b} - A\mathbf{x}_0\),解 \(M\mathbf{z}_0 = \mathbf{r}_0\),设 \(\mathbf{d}_0 = \mathbf{z}_0\)。
- 迭代直至收敛:
\[ \alpha_k = \frac{\mathbf{r}_k^\top \mathbf{z}_k}{\mathbf{d}_k^\top A \mathbf{d}_k}, \quad \mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{d}_k, \quad \mathbf{r}_{k+1} = \mathbf{r}_k - \alpha_k A \mathbf{d}_k, \quad \text{解 } M\mathbf{z}_{k+1} = \mathbf{r}_{k+1}, \quad \beta_k = \frac{\mathbf{r}_{k+1}^\top \mathbf{z}_{k+1}}{\mathbf{r}_k^\top \mathbf{z}_k}, \quad \mathbf{d}_{k+1} = \mathbf{z}_{k+1} + \beta_k \mathbf{d}_k. \]
- 分块预处理子构造
假设 \(A\) 可划分为 \(p \times p\) 分块矩阵:
\[ A = \begin{bmatrix} A_{11} & A_{12} & \cdots & A_{1p} \\ A_{21} & A_{22} & \cdots & A_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ A_{p1} & A_{p2} & \cdots & A_{pp} \end{bmatrix}. \]
常见分块预处理子包括:
- 分块对角预处理子:\(M_{\text{diag}} = \operatorname{diag}(A_{11}, A_{22}, \dots, A_{pp})\)。
优点:易于并行求逆(每块独立处理);缺点:忽略块间耦合,预处理效果可能有限。 - 分块三角预处理子:如分块下三角预处理 \(M_{\text{tri}} = \begin{bmatrix} A_{11} & 0 \\ \vdots & \ddots \\ A_{p1} & \cdots & A_{pp} \end{bmatrix}\)。
优点:保留部分耦合信息;缺点:需顺序求解块三角系统。 - 加性Schwarz预处理子:重叠分块预处理,提升连续性问题的收敛性。
-
分块预处理子在PCG中的实现
以分块对角预处理为例,步骤:- 构造 \(M = \operatorname{diag}(A_{11}, \dots, A_{pp})\)。
注:每块 \(A_{ii}\) 需对称正定(若 \(A\) 正定则分块主对角块正定)。 - 在PCG迭代中,需解 \(M\mathbf{z}_k = \mathbf{r}_k\):将 \(\mathbf{r}_k\) 按分块划分为 \(\mathbf{r}_k = [\mathbf{r}_k^{(1)}; \dots; \mathbf{r}_k^{(p)}]\),则每块独立求解 \(A_{ii} \mathbf{z}_k^{(i)} = \mathbf{r}_k^{(i)}\)。
这可并行计算,例如每块使用Cholesky分解或CG法求解(若块本身大型稀疏)。 - 更新搜索方向时使用 \(\mathbf{z}_k\) 而非原始残差 \(\mathbf{r}_k\)。
- 构造 \(M = \operatorname{diag}(A_{11}, \dots, A_{pp})\)。
-
收敛性与效率分析
- 收敛性:分块预处理后,条件数满足 \(\kappa(M^{-1}A) \leq \kappa(A)\),迭代次数减少。
分块越精细(如重叠分块),\(M^{-1}A\) 越接近单位矩阵,收敛越快,但预处理成本越高。 - 计算效率:分块预处理平衡了直接法与迭代法的优点。每迭代步需一次矩阵-向量乘 \(A\mathbf{d}_k\) 和一次预处理解算 \(M^{-1}\mathbf{r}_k\)。
分块结构允许并行处理块运算,尤其适合分布式计算环境。
- 收敛性:分块预处理后,条件数满足 \(\kappa(M^{-1}A) \leq \kappa(A)\),迭代次数减少。
总结
分块预处理共轭梯度法通过利用矩阵的分块结构,设计高效预处理子,显著加速对称正定系统的求解。关键在于选择合适的分块预处理子,以在预处理成本和收敛速度间取得平衡。该方法在大规模科学计算中广泛应用,如有限元法和偏微分方程数值解。