稀疏矩阵的逆迭代算法求最小特征值及对应特征向量
1. 算法描述
在大型稀疏矩阵的特征值问题中,我们常常需要计算其最小(模最小)的特征值及对应的特征向量。逆迭代算法(Inverse Iteration)是幂迭代法(Power Method)的一种变体,它通过求解线性方程组来加速收敛到目标特征值,特别适合计算已知特征值近似值附近的特征向量,或直接用于计算最小特征值。对于稀疏矩阵,逆迭代的高效性依赖于快速求解线性方程组。
给定一个 \(n \times n\) 的稀疏矩阵 \(A\),假设其所有特征值为 \(\lambda_1, \lambda_2, \dots, \lambda_n\),对应的特征向量为 \(\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n\)。逆迭代的目标是计算最小特征值 \(\lambda_{\min}\)(即 \(|\lambda_{\min}| = \min_i |\lambda_i|\))及其特征向量 \(\mathbf{v}_{\min}\)。算法的核心思想是:对矩阵 \(A\) 应用幂迭代于其逆矩阵 \(A^{-1}\),因为 \(A^{-1}\) 的特征值是 \(A\) 的特征值的倒数,所以 \(A^{-1}\) 的模最大特征值对应于 \(A\) 的模最小特征值。迭代中,我们避免显式计算逆矩阵,而是通过求解线性方程组来模拟逆矩阵的作用。
2. 算法步骤详解
步骤 1: 初始化
- 选择一个初始向量 \(\mathbf{x}_0\),通常随机生成,要求与目标特征向量 \(\mathbf{v}_{\min}\) 非正交(实践中随机向量以高概率满足)。
- 设定一个位移参数 \(\mu\)。如果已知最小特征值的近似值 \(\tilde{\lambda}\),则设 \(\mu = \tilde{\lambda}\) 以加速收敛;否则,可以设 \(\mu = 0\)(此时计算的是模最小特征值)或其他启发式值。
- 预处理:对矩阵 \((A - \mu I)\) 进行预处理分解(如 LU 分解或 Cholesky 分解),以便后续迭代中高效求解线性方程组。对于稀疏矩阵,常用稀疏直接求解器(如 UMFPACK)或迭代法(如预处理共轭梯度法)求解,但为了稳定性,常采用直接法。
- 设定收敛容差 \(\epsilon\)(如 \(10^{-10}\))和最大迭代次数 \(K\)。
步骤 2: 迭代过程
对于 \(k = 0, 1, 2, \dots, K-1\),执行以下子步骤:
- 归一化当前向量:
\[ \mathbf{y}_k = \frac{\mathbf{x}_k}{\|\mathbf{x}_k\|_2} \]
这里使用 2-范数归一化,防止向量元素过大或过小。
-
求解线性方程组:
求解 \((A - \mu I) \mathbf{x}_{k+1} = \mathbf{y}_k\)。
这是逆迭代的核心步骤。因为 \((A - \mu I)^{-1}\) 作用在 \(\mathbf{y}_k\) 上,相当于对 \(A - \mu I\) 的逆进行幂迭代。通过求解该方程组,我们得到新向量 \(\mathbf{x}_{k+1}\)。- 若 \(\mu\) 接近 \(\lambda_{\min}\),则 \((A - \mu I)\) 接近奇异,方程组可能病态,但解的方向会强烈趋向 \(\mathbf{v}_{\min}\),加速收敛。
- 对于稀疏矩阵,使用步骤 1 的预处理分解来高效求解(如先进行稀疏 LU 分解 \((A - \mu I) = LU\),然后前代回代求解)。
-
计算瑞利商近似特征值:
\[ \theta_k = \frac{\mathbf{y}_k^T A \mathbf{y}_k}{\mathbf{y}_k^T \mathbf{y}_k} \]
瑞利商给出当前近似向量对应特征值的估计。对于 Hermitian 矩阵,这是最优近似;对于非对称矩阵,仍可用但可能振荡。
-
检查收敛:
计算残差 \(\mathbf{r}_k = A \mathbf{y}_k - \theta_k \mathbf{y}_k\),检查其范数 \(\|\mathbf{r}_k\|_2 < \epsilon\)。
若满足,则 \(\lambda_{\min} \approx \theta_k\),特征向量 \(\mathbf{v}_{\min} \approx \mathbf{y}_k\),迭代终止;否则继续。 -
准备下一迭代:
若未收敛,令 \(k = k+1\),返回步骤 2.1。注意 \(\mathbf{x}_{k+1}\) 已从方程组解出,直接用于下一轮归一化。
步骤 3: 后处理
- 最终输出:特征值近似 \(\lambda_{\min} = \theta_k\),特征向量近似 \(\mathbf{v}_{\min} = \mathbf{y}_k\)(可能需要归一化)。
- 若 \(\mu\) 是估计值,实际计算的特征值可能对应 \(\mu + 1/\sigma\),其中 \(\sigma\) 是逆迭代的隐含尺度,但通常我们直接从瑞利商得到 \(\lambda_{\min}\)。
3. 关键技术与注意事项
- 位移参数 \(\mu\):若 \(\mu\) 恰好等于某个特征值,则 \((A - \mu I)\) 奇异,算法可能失败。实践中,可设置 \(\mu\) 为特征值估计加微小扰动(如 \(\mu = \tilde{\lambda} + \delta\),\(\delta \sim 10^{-6}\))。
- 求解线性方程组:对于大型稀疏矩阵,直接法可能因填充(fill-in)导致内存消耗大。此时可用迭代法(如 GMRES、BiCGSTAB)配合预处理(如 ILU),但需确保迭代求解的精度,以免影响逆迭代收敛。
- 正交化:若计算多个特征对,需在逆迭代中加入正交化(如 Gram-Schmidt)以避免收敛到已求得的特征向量。
- 收敛性:逆迭代线性收敛,收敛速率取决于比值 \(|\lambda_{\min} - \mu| / |\lambda_{\text{next}} - \mu|\),其中 \(\lambda_{\text{next}}\) 是下一个最接近 \(\mu\) 的特征值。当 \(\mu\) 接近 \(\lambda_{\min}\) 时,收敛极快(通常几次迭代)。
- 与幂迭代的关系:若 \(\mu = 0\),逆迭代等价于对 \(A^{-1}\) 的幂迭代,计算 \(A\) 的模最小特征值。
4. 示例演示
考虑稀疏对称矩阵 \(A = \begin{bmatrix} 2 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 2 \end{bmatrix}\),其特征值约为 \(0.59, 2.00, 3.41\)。最小特征值 \(\lambda_{\min} \approx 0.59\)。
- 初始化:\(\mathbf{x}_0 = [1, 1, 1]^T\),\(\mu = 0.5\)(接近 0.59),\(\epsilon = 10^{-6}\)。
- 对 \((A - \mu I)\) 进行 LU 分解。
- 迭代:
- \(k=0\):归一化 \(\mathbf{y}_0 = [0.577, 0.577, 0.577]^T\)。
- 解 \((A - \mu I)\mathbf{x}_1 = \mathbf{y}_0\),得 \(\mathbf{x}_1 \approx [1.366, 2.000, 1.366]^T\)。
- 瑞利商 \(\theta_0 = 0.600\),残差 \(\|\mathbf{r}_0\|_2 \approx 0.1\)。
- 继续迭代,经 3 步后残差 \(< 10^{-6}\),得 \(\lambda_{\min} \approx 0.5858\),特征向量 \(\approx [0.5, 0.707, 0.5]^T\)(归一化)。
5. 算法应用与扩展
- 稀疏特征值问题:广泛应用于物理模拟(如结构振动)、数据科学(如谱聚类)中,计算最小特征值对应基态或重要模式。
- 位移策略:可结合二分法或谱变换,先粗略定位特征值区间,再用逆迭代求精。
- 块逆迭代:同时处理多个向量,计算多个特征对,提高效率。
- 与 Lanczos/Arnoldi 结合:先用迭代法(如 Arnoldi)获得近似特征值,再用逆迭代求精特征向量。
通过上述步骤,逆迭代利用稀疏求解器高效处理大型问题,成为计算最小特征值的实用工具。其核心是将特征值问题转化为线性方程组求解,适合预处理和并行化。