分块矩阵的预处理FGMRES算法解非对称多重右端项线性方程组
题目描述
考虑求解一组具有相同系数矩阵但不同右端项的非对称线性方程组:
\[A X = B \]
其中 \(A \in \mathbb{R}^{n \times n}\) 是一个大型稀疏非对称矩阵,\(X, B \in \mathbb{R}^{n \times m}\) 是矩阵形式的多重右端项(即 \(m\) 个线性方程组 \(A x^{(i)} = b^{(i)}\),\(i = 1, \dots, m\))。直接对每个右端项独立调用迭代法(如GMRES)计算成本高。分块矩阵的预处理灵活广义最小残差法(Block Preconditioned FGMRES)通过同时处理多重右端项,利用Krylov子空间的重叠性减少计算量。FGMRES允许预处理子随迭代变化,适用于分块预处理或右端项相关的自适应预处理。
解题过程
- 问题转化与分块Krylov子空间
将多重右端项方程组写为矩阵形式 \(A X = B\)。定义分块残差矩阵 \(R_0 = B - A X_0\),其中 \(X_0\) 是初始猜测(如零矩阵)。分块Krylov子空间为:
\[ \mathcal{K}_k(A, R_0) = \operatorname{span}\{R_0, A R_0, A^2 R_0, \dots, A^{k-1} R_0\} \]
目标是寻找近似解 \(X_k \in X_0 + \mathcal{K}_k(A, R_0)\) 使残差范数最小。
- 分块Arnoldi过程生成正交基
- 步骤1:对残差矩阵 \(R_0\) 进行经济型QR分解:
\[ R_0 = V_1 \Sigma_1, \quad V_1 \in \mathbb{R}^{n \times m}, \quad \Sigma_1 \in \mathbb{R}^{m \times m} \]
其中 $ V_1 $ 的列正交(即 $ V_1^\top V_1 = I_m $),$ \Sigma_1 $ 是上三角矩阵。
- 步骤2:对于 \(j = 1, 2, \dots, k\):
- 计算矩阵块 \(W_j = A V_j\)(\(V_j \in \mathbb{R}^{n \times m}\) 是当前正交基块)。
- 应用预处理子(可能随 \(j\) 变化):
\[ Z_j = M_j^{-1} V_j \]
其中 $ M_j^{-1} $ 是第 $ j $ 步的预处理算子,FGMRES允许 $ M_j $ 依赖迭代步。
3. 对 $ W_j $ 进行正交化(使用块Gram-Schmidt):
对于 $ i = 1 $ 到 $ j $:
\[ H_{i,j} = V_i^\top W_j, \quad W_j := W_j - V_i H_{i,j} \]
其中 $ H_{i,j} \in \mathbb{R}^{m \times m} $ 是块Hessenberg矩阵的子块。
4. 对 $ W_j $ 进行经济型QR分解:
\[ W_j = V_{j+1} H_{j+1,j}, \quad V_{j+1}^\top V_{j+1} = I_m \]
记录 $ H_{j+1,j} \in \mathbb{R}^{m \times m} $。
- 结果:得到正交基块序列 \(V_1, V_2, \dots, V_{k+1}\) 和块上Hessenberg矩阵 \(\bar{H}_k \in \mathbb{R}^{(k+1)m \times km}\)。
- FGMRES的最小二乘问题求解
近似解可写为 \(X_k = X_0 + Z_k Y_k\),其中 \(Z_k = [Z_1, \dots, Z_k]\) 由预处理后的基块组成,\(Y_k \in \mathbb{R}^{km \times m}\) 通过最小化残差范数求解:
\[ \min_{Y_k} \| B - A (X_0 + Z_k Y_k) \|_F \]
利用Arnoldi过程关系 \(A V_k = V_{k+1} \bar{H}_k\) 和 \(V_1 = R_0 \Sigma_1^{-1}\),问题转化为:
\[ \min_{Y_k} \| \Sigma_1 e_1 - \bar{H}_k Y_k \|_F \]
其中 \(e_1 \in \mathbb{R}^{km \times m}\) 是前 \(m\) 列为单位矩阵的块向量。使用块QR分解或Givens旋转求解该最小二乘问题。
-
算法收敛与重启策略
- 若残差 \(\| R_k \|_F\) 小于容忍误差,则停止迭代。
- 若未收敛且达到最大子空间维数 \(k\),执行隐式重启:保留当前解 \(X_k\),用最新残差 \(R_k\) 重新初始化Arnoldi过程,避免子空间过大导致存储成本增加。
-
预处理子设计
- 固定预处理子:如不完全LU分解(ILU)或分块对角预处理。
- 可变预处理子:针对不同右端项自适应调整,例如基于残差范数的条件选择不同预处理策略,提升对多重右端项的整体收敛性。
关键点
- 分块Krylov子空间同时处理多重右端项,减少矩阵-向量乘积次数。
- FGMRES的灵活性允许预处理子随迭代变化,适应分块预处理或右端项特异性。
- 最小二乘问题通过块Hessenberg矩阵求解,确保残差单调下降。