分块矩阵的广义共轭残差法(GCR)解非对称线性方程组
题目描述
考虑求解非对称线性方程组 \(A\mathbf{x} = \mathbf{b}\),其中 \(A \in \mathbb{R}^{n \times n}\) 是一个大型稀疏非对称矩阵,\(\mathbf{b} \in \mathbb{R}^n\) 是已知向量。当矩阵 \(A\) 规模很大时,直接法(如LU分解)计算成本高,迭代法更适用。广义共轭残差法(GCR)是一种Krylov子空间方法,适用于非对称矩阵,通过最小化残差范数在Krylov子空间上的投影来逼近解。若 \(A\) 是分块矩阵(例如来自离散偏微分方程或结构化数据),利用分块结构可提升算法效率。本题目讲解分块矩阵的GCR算法实现。
解题过程
-
问题建立与Krylov子空间
目标是在Krylov子空间 \(\mathcal{K}_k(A, \mathbf{r}_0) = \text{span}\{\mathbf{r}_0, A\mathbf{r}_0, \dots, A^{k-1}\mathbf{r}_0\}\) 中寻找近似解 \(\mathbf{x}_k\),其中初始残差 \(\mathbf{r}_0 = \mathbf{b} - A\mathbf{x}_0\)(\(\mathbf{x}_0\) 为初始猜测)。GCR通过确保残差正交于某个子空间来最小化 \(\|\mathbf{r}_k\|_2\)。 -
分块矩阵的向量乘法优化
设 \(A\) 为分块矩阵,例如分块三对角形式:
\[ A = \begin{bmatrix} A_{11} & A_{12} & & \\ A_{21} & A_{22} & \ddots & \\ & \ddots & \ddots & A_{m-1,m} \\ & & A_{m,m-1} & A_{mm} \end{bmatrix} \]
其中每个子块 \(A_{ij} \in \mathbb{R}^{p \times p}\)(假设均匀分块,\(n = mp\))。计算矩阵-向量乘积 \(A\mathbf{v}\) 时,可分解为子块与子向量的乘积之和,例如:
\[ (A\mathbf{v})_i = \sum_{j=1}^m A_{ij} \mathbf{v}_j, \]
这里 \(\mathbf{v}_j\) 是 \(\mathbf{v}\) 的第 \(j\) 个子块。利用分块稀疏性,仅计算非零子块的乘积,降低计算量从 \(O(n^2)\) 至 \(O(\text{非零块数} \times p^2)\)。
- GCR算法步骤
- 初始化:选择初始解 \(\mathbf{x}_0\)(常取 \(\mathbf{0}\)),计算残差 \(\mathbf{r}_0 = \mathbf{b} - A\mathbf{x}_0\)。设搜索方向集 \(\mathbf{p}_0, \mathbf{p}_1, \dots\) 初始为空。
- 迭代步骤(对于 \(k = 0, 1, 2, \dots\) 直到收敛):
- 新搜索方向:令 \(\mathbf{p}_k = \mathbf{r}_k\)。
- 正交化:对 \(i = 0\) 到 \(k-1\),执行正交化以保持 \(A\mathbf{p}_k\) 与之前方向正交:
\[ \mathbf{p}_k \leftarrow \mathbf{p}_k - \frac{\langle A\mathbf{p}_k, A\mathbf{p}_i \rangle}{\langle A\mathbf{p}_i, A\mathbf{p}_i \rangle} \mathbf{p}_i. \]
此步骤确保 $ A\mathbf{p}_k \perp A\mathbf{p}_i $(对 $ i < k $),为最小化残差范数奠定基础。
3. **更新解和残差**:计算步长 $ \alpha_k = \frac{\langle \mathbf{r}_k, A\mathbf{p}_k \rangle}{\langle A\mathbf{p}_k, A\mathbf{p}_k \rangle} $,然后更新:
\[ \mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{p}_k, \quad \mathbf{r}_{k+1} = \mathbf{r}_k - \alpha_k A\mathbf{p}_k. \]
4. **检查收敛**:若 $ \|\mathbf{r}_{k+1}\|_2 < \epsilon $(预设容差),则停止;否则继续。
- 分块结构在正交化中的效率提升
正交化步骤涉及内积 \(\langle A\mathbf{p}_k, A\mathbf{p}_i \rangle\) 的计算。由于 \(A\) 是分块矩阵,计算 \(A\mathbf{p}_k\) 时已利用分块乘法优化。内积可分解为子块贡献之和,例如:
\[ \langle A\mathbf{p}_k, A\mathbf{p}_i \rangle = \sum_{j=1}^m (A\mathbf{p}_k)_j^\top (A\mathbf{p}_i)_j, \]
其中 \((A\mathbf{p}_k)_j\) 是向量的第 \(j\) 个子块。这允许并行计算子块内积,减少通信开销。
-
收敛性与重启策略
GCR在精确算术下最多 \(n\) 步收敛,但实际中因舍入误差需重启。每 \(m\) 步(\(m \ll n\))后重启:用当前 \(\mathbf{x}_m\) 作为新初始值,重新初始化残差和搜索方向集,避免存储和计算成本随迭代次数线性增长。 -
算法复杂度与优势
- 每步主要成本:一次矩阵-向量乘(利用分块结构优化)和 \(O(k)\) 次向量操作(内积、标量乘加)。
- 相比GMRES,GCR通过显式正交化避免构建Hessenberg矩阵,但需存储所有搜索方向。分块结构可减少缓存缺失,提升数据局部性。
- 适用于分布式计算,子块运算可分配至不同处理器。
通过结合分块矩阵特性和GCR的最小残差性质,该算法高效求解大规模非对称线性系统。