分块矩阵的共轭梯度法解对称正定线性方程组
题目描述
考虑大型对称正定线性方程组 \(A\mathbf{x} = \mathbf{b}\),其中 \(A \in \mathbb{R}^{n \times n}\) 是对称正定矩阵(SPD),且以分块形式存储(例如,来自有限元法或差分法的离散化)。传统共轭梯度法(CG)直接处理整个矩阵,但当矩阵规模极大时,存储和计算成本较高。分块共轭梯度法通过将矩阵和向量划分为块,利用分块结构减少内存访问次数,并可能通过块操作提升计算效率。目标是通过分块化改进CG法的实现,适用于分布式计算或分层存储系统。
解题过程
1. 分块矩阵与向量的划分
将矩阵 \(A\) 划分为 \(p \times p\) 个块,每块大小为 \(m \times m\)(假设 \(n = pm\)):
\[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}, \quad \mathbf{x} = \begin{bmatrix} \mathbf{x}_1 \\ \mathbf{x}_2 \\ \vdots \\ \mathbf{x}_p \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} \mathbf{b}_1 \\ \mathbf{b}_2 \\ \vdots \\ \mathbf{b}_p \end{bmatrix}. \]
由于 \(A\) 对称正定,每个对角块 \(A_{ii}\) 也是对称正定,且 \(A_{ij} = A_{ji}^\top\)。
2. 分块CG法的关键操作
传统CG法的每一步需计算:
- 矩阵-向量乘: \(\mathbf{q} = A \mathbf{p}\)
- 向量内积: \(\alpha = \mathbf{r}^\top \mathbf{r} / \mathbf{p}^\top \mathbf{q}\)
- 向量更新: \(\mathbf{x} \leftarrow \mathbf{x} + \alpha \mathbf{p}, \quad \mathbf{r} \leftarrow \mathbf{r} - \alpha \mathbf{q}\)
在分块版本中,这些操作需按块实现:
- 矩阵-向量乘:
\[ \mathbf{q}_i = \sum_{j=1}^p A_{ij} \mathbf{p}_j \quad (i=1,\dots,p). \]
可并行计算每个 \(\mathbf{q}_i\),且若某些 \(A_{ij}\) 为零(稀疏分块),可跳过计算。
- 内积计算:
\[ \mathbf{r}^\top \mathbf{r} = \sum_{i=1}^p \mathbf{r}_i^\top \mathbf{r}_i, \quad \mathbf{p}^\top \mathbf{q} = \sum_{i=1}^p \mathbf{p}_i^\top \mathbf{q}_i. \]
各块内积可局部计算后求和,减少通信开销。
3. 分块CG算法步骤
- 初始化:
设 \(\mathbf{x}^{(0)} = \mathbf{0}\),残差 \(\mathbf{r}^{(0)} = \mathbf{b} - A \mathbf{x}^{(0)} = \mathbf{b}\),初始搜索方向 \(\mathbf{p}^{(0)} = \mathbf{r}^{(0)}\)。 - 迭代(对 \(k=0,1,\dots\) 直至收敛):
a. 计算 \(\mathbf{q}^{(k)} = A \mathbf{p}^{(k)}\)(按分块矩阵-向量乘)。
b. 计算标量:
\[ \alpha_k = \frac{ (\mathbf{r}^{(k)})^\top \mathbf{r}^{(k)} }{ (\mathbf{p}^{(k)})^\top \mathbf{q}^{(k)} }. \]
c. 更新解与残差:
\[ \mathbf{x}^{(k+1)} = \mathbf{x}^{(k)} + \alpha_k \mathbf{p}^{(k)}, \quad \mathbf{r}^{(k+1)} = \mathbf{r}^{(k)} - \alpha_k \mathbf{q}^{(k)}. \]
d. 计算 $ \beta_k = \frac{ (\mathbf{r}^{(k+1)})^\top \mathbf{r}^{(k+1)} }{ (\mathbf{r}^{(k)})^\top \mathbf{r}^{(k)} } $。
e. 更新搜索方向:
\[ \mathbf{p}^{(k+1)} = \mathbf{r}^{(k+1)} + \beta_k \mathbf{p}^{(k)}. \]
4. 分块化的优势与注意事项
- 计算效率:块操作可调用BLAS-3级例程(如分块矩阵乘),比标量操作更高效。
- 存储优化:分块存储允许部分块驻留缓存,减少内存带宽需求。
- 并行性:不同块的计算可分配至多个处理器,适合分布式内存系统。
- 收敛性:分块CG与传统CG数学等价,收敛速度由 \(A\) 的条件数决定,但数值稳定性可能受块计算误差影响。
5. 实际应用中的扩展
- 预处理分块CG:结合分块预处理子(如分块对角预处理 \(M^{-1} = \text{blockdiag}(A_{11}^{-1}, \dots, A_{pp}^{-1})\))加速收敛。
- 动态分块:根据非零模式调整块大小,平衡负载。
通过分块化,CG法能更高效处理大规模问题,同时保持算法的简洁性和对称正定系统的理论保证。