基于Krylov子空间方法的块D-Lanczos算法求解多重右端项线性方程组
题目描述
我们考虑求解如下形式的多重右端项线性方程组:
\[A X = B \]
其中 \(A \in \mathbb{R}^{n \times n}\) 是一个大规模的、可能非对称的稀疏矩阵,\(B \in \mathbb{R}^{n \times s}\) 是一个具有 \(s\) 列的右端项矩阵(即 \(s\) 个线性方程组共享同一个系数矩阵 \(A\)),我们需要求解 \(X \in \mathbb{R}^{n \times s}\)。传统的Krylov子空间方法(如GMRES、BiCG等)每次只能处理单个右端项(\(s=1\))。当 \(s > 1\) 时,若对每个右端项分别求解,计算量很大。块D-Lanczos算法是一种基于Krylov子空间的方法,它能同时处理多个右端项,通过构建一个块Krylov子空间,并利用短递推关系(类似于经典Lanczos算法的三项递推)来高效求解。
算法背景与核心思想
- 块Krylov子空间:
对单个右端向量 \(b\),Krylov子空间定义为 \(\mathcal{K}_m(A, b) = \text{span}\{b, Ab, A^2b, \dots, A^{m-1}b\}\)。
对多个右端项(矩阵 \(B\)),其块Krylov子空间定义为:
\[ \mathcal{K}_m(A, B) = \text{span}\{B, AB, A^2B, \dots, A^{m-1}B\} \]
即由 \(B\) 的列及其幂次与 \(A\) 的乘积所张成的子空间。
-
D-Lanczos算法的推广:
经典Lanczos算法用于对称矩阵,通过三项递推生成一组正交基。对于非对称矩阵,双正交Lanczos算法(即非对称Lanczos)通过构建两个双正交的基向量序列来处理。块D-Lanczos算法是非对称Lanczos算法的块版本,能够同时从多个初始向量(即 \(B\) 的列)出发,生成两个双正交的块向量序列,从而将原问题投影到一个规模小得多的块三对角矩阵上。 -
核心目标:
在块Krylov子空间 \(\mathcal{K}_m(A, B)\) 中寻找近似解 \(X_m\),使得残差 \(R_m = B - A X_m\) 的范数最小,或满足某种投影条件。
算法步骤详解
步骤1:初始化
- 对右端项矩阵 \(B\) 进行“经济型”QR分解:
\[ B = V_1 \Sigma_1 \]
其中 \(V_1 \in \mathbb{R}^{n \times s}\) 的列是标准正交的(即 \(V_1^\top V_1 = I_s\)),\(\Sigma_1 \in \mathbb{R}^{s \times s}\) 是一个上三角矩阵。
(注:若 \(B\) 的列线性相关,可以调整 \(s\) 或使用列主元QR。)
-
类似地,选择另一个初始块 \(W_1 \in \mathbb{R}^{n \times s}\),通常取 \(W_1 = V_1\) 或 \(W_1\) 为任意满足 \(W_1^\top V_1 = I_s\) 的矩阵。在标准块D-Lanczos中,常取 \(W_1 = V_1\)。
-
设定最大迭代步数 \(m\),初始化块残差 \(R_0 = B\),初始解 \(X_0 = 0\)。
步骤2:块D-Lanczos双正交化过程
对于 \(j = 1, 2, \dots, m\) 执行以下递推:
- 计算矩阵乘积:
\[ \widetilde{V}_{j+1} = A V_j \]
\[ \widetilde{W}_{j+1} = A^\top W_j \]
(注意:若 \(A\) 非对称,我们需要同时用 \(A\) 和 \(A^\top\) 进行递推,以构建双正交基。)
- 正交化处理(即“块Gram–Schmidt”双正交化):
为了保持双正交性(即 \(W_i^\top V_j = 0\) 当 \(i \neq j\)),我们需要进行正交化:
\[ \widetilde{V}_{j+1} := \widetilde{V}_{j+1} - V_j \alpha_j - V_{j-1} \beta_j^\top \]
\[ \widetilde{W}_{j+1} := \widetilde{W}_{j+1} - W_j \alpha_j^\top - W_{j-1} \beta_j \]
其中系数矩阵 \(\alpha_j, \beta_j \in \mathbb{R}^{s \times s}\) 由双正交条件确定:
\[ \alpha_j = W_j^\top \widetilde{V}_{j+1} \quad \text{(在正交化前计算)} \]
\[ \beta_j = W_{j-1}^\top \widetilde{V}_{j+1} \quad \text{(同样在正交化前计算,并令 } V_0 = 0, W_0 = 0\text{)} \]
实际上,标准做法是:
- 先计算 \(\alpha_j = W_j^\top (A V_j)\)。
- 然后计算 \(\widetilde{V}_{j+1} = A V_j - V_j \alpha_j - V_{j-1} \beta_j^\top\)。
- 类似地,计算 \(\widetilde{W}_{j+1} = A^\top W_j - W_j \alpha_j^\top - W_{j-1} \beta_j\)。
- 归一化(进行QR分解):
对 \(\widetilde{V}_{j+1}\) 进行“经济型”QR分解:
\[ \widetilde{V}_{j+1} = V_{j+1} \beta_{j+1}^\top \]
其中 \(V_{j+1} \in \mathbb{R}^{n \times s}\) 的列标准正交,\(\beta_{j+1}^\top \in \mathbb{R}^{s \times s}\) 是上三角矩阵。
类似地,对 \(\widetilde{W}_{j+1}\) 进行QR分解:
\[ \widetilde{W}_{j+1} = W_{j+1} \gamma_{j+1}^\top \]
其中 \(W_{j+1} \in \mathbb{R}^{n \times s}\) 的列标准正交,\(\gamma_{j+1}^\top \in \mathbb{R}^{s \times s}\) 是上三角矩阵。
-
双正交性调整:
为确保 \(W_{j+1}^\top V_{j+1} = I_s\),可以对 \(W_{j+1}\) 或 \(V_{j+1}\) 进行缩放调整。通常,我们取 \(\gamma_{j+1} = \beta_{j+1}\) 以简化。最终,我们得到块三对角矩阵的块形式:
\[ T_m = \begin{pmatrix} \alpha_1 & \beta_2^\top & & \\ \beta_2 & \alpha_2 & \ddots & \\ & \ddots & \ddots & \beta_m^\top \\ & & \beta_m & \alpha_m \end{pmatrix} \]
其中每个 \(\alpha_j, \beta_j\) 是 \(s \times s\) 矩阵。
同时,我们有:
\[ A V_m = V_m T_m + V_{m+1} \beta_{m+1}^\top E_m^\top \]
其中 \(V_m = [V_1, V_2, \dots, V_m] \in \mathbb{R}^{n \times ms}\) 的列构成块Krylov子空间的一组基,\(E_m\) 是 \(ms \times s\) 矩阵,其最后 \(s\) 列为单位矩阵。
步骤3:求解投影系统
- 将原方程 \(A X = B\) 投影到块Krylov子空间 \(\mathcal{K}_m(A, B)\) 上。设近似解为:
\[ X_m = V_m Y_m \]
其中 \(Y_m \in \mathbb{R}^{ms \times s}\) 是待求的系数矩阵。
- 根据残差正交性条件(Galerkin条件),要求残差 \(R_m = B - A X_m\) 与 \(W_m\) 正交:
\[ W_m^\top (B - A V_m Y_m) = 0 \]
利用 \(B = V_1 \Sigma_1\) 和 \(W_1^\top V_1 = I_s\),得到:
\[ E_1^\top \Sigma_1 - T_m Y_m = 0 \]
其中 \(E_1\) 是 \(ms \times s\) 矩阵,其前 \(s\) 列为单位矩阵。
- 因此,我们需要求解块三对角线性系统:
\[ T_m Y_m = E_1 \Sigma_1 \]
由于 \(T_m\) 是块三对角矩阵,其规模为 \(ms \times ms\),相比原问题小得多,可以用直接法(如块LU分解)或迭代法求解。
步骤4:更新解与残差
- 求解得到 \(Y_m\) 后,计算近似解:
\[ X_m = V_m Y_m \]
- 计算残差范数 \(\| R_m \|_F = \| B - A X_m \|_F\)。可以证明:
\[ R_m = - V_{m+1} \beta_{m+1}^\top E_m^\top Y_m \]
因此残差范数可通过 \(\| \beta_{m+1}^\top E_m^\top Y_m \|_F\) 方便计算,无需显式计算 \(A X_m\)。
- 若残差范数满足精度要求,则停止;否则,可增加 \(m\) 或重新启动。
算法特点与注意事项
- 短递推:块D-Lanczos利用三项递推(涉及 \(V_{j-1}, V_j, V_{j+1}\) ),只需存储最近几个块向量,内存友好。
- 双正交性:由于 \(A\) 非对称,需要同时构建 \(V_j\) 和 \(W_j\) 两个序列,并保持 \(W_i^\top V_j = \delta_{ij} I_s\)。数值舍入误差可能导致双正交性丢失,通常需要完全重正交化(增加计算量)。
- 中断与重启:若 \(\beta_{j+1}\) 秩亏损,说明块Krylov子空间已退化,需要提前终止或重启。
- 适用性:适合求解具有多个右端项的大规模稀疏非对称线性方程组,尤其在右端项相关时,块方法可加速收敛。
总结
块D-Lanczos算法通过扩展Lanczos双正交化到块形式,同时为多个右端项构建双正交基,将原问题投影到一个小规模的块三对角系统上求解。该方法在保持短递推优点的同时,能有效处理多重右端项问题,是Krylov子空间方法的一个重要扩展。