计算对应于最大幅度特征值的密集矩阵的特征向量的最有效方法是什么?

计算科学 线性代数 算法 本征系统
2021-12-19 05:14:41

我有一个密集的实对称方阵。尺寸约为 1000x1000。我需要计算第一个主成分,并想知道执行此操作的最佳算法可能是什么。

MATLAB 似乎使用Arnoldi / Lanczos算法(对于eigs)。但是通过阅读它们,我不确定它们是否比简单的幂迭代有任何优势,因为我的矩阵不是稀疏的,我只对第一个特征向量感兴趣。

有什么建议在这种情况下最快的算法是什么?

2个回答

最快的方法可能取决于矩阵的频谱和正态性,但在所有情况下,Krylov 算法都应该严格优于幂迭代。GW Stewart 在Matrix Algorithms, Volume II: Eigensystems的第 4 章第 3 节中对这个问题进行了很好的讨论

幂法基于以下观察:如果A有一个占主导地位的特征对,然后在温和的限制下u向量Aku对主要特征向量产生越来越准确的近似值。然而,在每一步,幂方法只考虑单个向量Aku,这相当于丢弃了先前生成的向量中包含的信息。事实证明,这些信息很有价值……”

他继续表明,因为100×100对角矩阵与i'第对角线值设置为.95i(从i=0),经过 25 次迭代后,Krylov 子空间捕获的主要特征向量比幂次迭代好 8 个数量级。

幂迭代是最简单的,但如上所述,如果矩阵非常非正态,它可能会非常缓慢地收敛。你会得到一个“驼峰”现象,在渐近行为开始之前,序列似乎会在多次迭代中发散。

由于您的矩阵是对称的,您可以考虑 RQI 迭代,在对称情况下会产生三次收敛:http ://en.wikipedia.org/wiki/Rayleigh_quotient_iteration 。

是什么让 Arnoldi 或 Lanczos 迭代非常好(至少在我看来,但我不研究数值线性代数)是它们非常通用。通常可以控制他们给你哪些特征值,以及你得到多少。在对称情况下尤其如此(如果您的矩阵是确定的,那就更好了)。对于对称问题,它们非常健壮。作为一个黑匣子,它们运行良好,但它们也非常容易接受新的问题信息,例如解决涉及矩阵的系统的能力。