分块矩阵的广义特征值问题的快速投影法
题目描述
广义特征值问题(Generalized Eigenvalue Problem, GEP)定义为寻找数对 \((\lambda, \mathbf{x})\),使得
\[A \mathbf{x} = \lambda B \mathbf{x}, \]
其中 \(A\) 和 \(B\) 是给定的 \(n \times n\) 矩阵,且通常 \(B\) 可逆。当矩阵规模很大时,直接求解(如化为标准问题 \(B^{-1} A \mathbf{x} = \lambda \mathbf{x}\))可能计算昂贵或不可行。快速投影法是一种通过构造低维子空间来近似部分特征对的迭代方法,特别适合大规模稀疏或结构化的分块矩阵。本题将详细讲解该方法的核心思路、步骤与关键实现细节。
解题过程循序渐进讲解
1. 问题转化与动机
直接求解广义特征值问题通常需要 \(O(n^3)\) 的复杂度。对于大规模问题,我们往往只需求解部分特征对(如模最大或最小的几个)。投影法的基本思想是:
- 构造一个维数 \(m \ll n\) 的子空间 \(\mathcal{K}_m\),
- 将原问题投影到 \(\mathcal{K}_m\) 上得到一个小规模的广义特征值问题,
- 求解这个小问题,将其特征对作为原问题的近似。
优势:当 \(A, B\) 是稀疏或具有快速矩阵向量乘(matvec)能力时,可显著降低计算量。
2. 核心步骤:Krylov子空间的构造
常用子空间是 Krylov 子空间:
\[\mathcal{K}_m(A, B, \mathbf{v}_1) = \text{span}\{ \mathbf{v}_1, (B^{-1}A) \mathbf{v}_1, (B^{-1}A)^2 \mathbf{v}_1, \dots, (B^{-1}A)^{m-1} \mathbf{v}_1 \}, \]
其中 \(\mathbf{v}_1\) 是初始向量(通常随机选取并归一化)。
注意:这里每次迭代需要计算 \(B^{-1}A \mathbf{v}\),相当于求解一个以 \(B\) 为系数矩阵的线性系统。当 \(B\) 是分块稀疏或可快速求逆时,这一步可高效完成。
实现细节:
通常不显式计算 \(B^{-1}A\),而是用 Arnoldi 或 Lanczos 过程(取决于 \(A, B\) 的对称性)生成一组标准正交基 \(V_m = [\mathbf{v}_1, \dots, \mathbf{v}_m]\) 和对应的上 Hessenberg 矩阵 \(H_m\),满足:
\[B^{-1} A V_m = V_m H_m + h_{m+1,m} \mathbf{v}_{m+1} \mathbf{e}_m^T, \]
其中 \(\mathbf{e}_m\) 是第 \(m\) 个单位向量。
3. 投影与降阶问题
将原问题限制在子空间 \(\mathcal{K}_m\) 上,即令近似特征向量 \(\mathbf{x} \approx V_m \mathbf{y}\)(\(\mathbf{y} \in \mathbb{R}^m\)),代入广义特征值方程并左乘 \(V_m^T\):
\[V_m^T A V_m \mathbf{y} = \lambda V_m^T B V_m \mathbf{y}. \]
定义投影矩阵:
\[\tilde{A}_m = V_m^T A V_m, \quad \tilde{B}_m = V_m^T B V_m. \]
则得到降阶的广义特征值问题:
\[\tilde{A}_m \mathbf{y} = \lambda \tilde{B}_m \mathbf{y}. \]
这是一个 \(m \times m\) 的小规模问题,可用稠密矩阵方法(如 QZ 算法)求解全部特征对。
4. 近似特征对的提取与收敛性判断
解降阶问题得到 \(m\) 个特征对 \((\tilde{\lambda}_i, \mathbf{y}_i)\),则原问题的近似特征对为:
\[\lambda_i \approx \tilde{\lambda}_i, \quad \mathbf{x}_i \approx V_m \mathbf{y}_i. \]
残量检验:计算残量向量
\[\mathbf{r}_i = A \mathbf{x}_i - \tilde{\lambda}_i B \mathbf{x}_i. \]
若 \(\|\mathbf{r}_i\|\) 小于给定容差,则认为该特征对已收敛。
加速技巧:
- 若只需求少数特征对,可采用隐式重启(Implicitly Restarted Arnoldi)技术,丢弃不需要的子空间方向,聚焦于目标特征值附近。
- 当 \(B\) 对称正定时,可预先对 \(B\) 作 Cholesky 分解 \(B = LL^T\),将原问题化为标准对称问题 \(L^{-1} A L^{-T} \mathbf{z} = \lambda \mathbf{z}\),再用 Lanczos 过程。
5. 处理分块矩阵的特殊结构
当 \(A, B\) 是分块矩阵(如来自偏微分方程离散化)时,可利用块结构加速:
- 块对角预处理:在求解 \(B^{-1}A \mathbf{v}\) 时,用块对角近似 \(\hat{B}\) 代替 \(B\) 作预处理,加速迭代。
- 分块矩阵向量乘:利用分块稀疏性,将 matvec 分解为子块运算,可并行计算。
- 分块正交化:在生成 Krylov 基时,对向量块进行块正交化(如块 Gram–Schmidt),提高数值稳定性。
示例结构:若 \(A, B\) 是 \(2 \times 2\) 块矩阵:
\[A = \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix}, \quad B = \begin{bmatrix} B_{11} & 0 \\ 0 & B_{22} \end{bmatrix}, \]
则 \(B^{-1}A\) 的 matvec 只需对每个块分别计算,再组合。
6. 算法流程总结
- 输入:矩阵 \(A, B\),初始向量 \(\mathbf{v}_1\),子空间维数 \(m\),容差 \(\tau\)。
- 构造 Krylov 子空间:
- 用 Arnoldi/Lanczos 过程(结合 \(B^{-1}A\) 的求解)生成 \(V_m\) 和 \(H_m\)。
- 形成降阶问题:计算 \(\tilde{A}_m = V_m^T A V_m\),\(\tilde{B}_m = V_m^T B V_m\)。
- 解小规模广义特征值问题:用 QZ 算法求 \((\tilde{\lambda}_i, \mathbf{y}_i)\)。
- 计算近似特征对:\(\mathbf{x}_i = V_m \mathbf{y}_i\)。
- 检验残量:若 \(\|\mathbf{r}_i\| < \tau\),接受该特征对;否则可增大 \(m\) 或重启迭代。
- 输出:收敛的特征对 \((\lambda_i, \mathbf{x}_i)\)。
关键点总结
- 核心思想:将大规模问题投影到低维 Krylov 子空间,转化为小规模稠密问题。
- 效率关键:快速计算 \(B^{-1}A \mathbf{v}\)(如用迭代法或预处理技术),以及利用矩阵稀疏性/分块结构。
- 适用场景:大规模稀疏/分块矩阵,且只需部分特征对的问题。
- 扩展:可结合随机采样(随机化 Krylov)进一步加速子空间构造,适用于超大规模问题。