用于查找 50x50 矩阵的最大特征值的 SVD——我是否在浪费大量时间?

计算科学 线性代数 本征系统
2021-12-24 01:22:47

我有一个程序,通过对所有实数对称 50x50 矩阵执行奇异值分解来计算它们的最大特征值。SVD 是程序中的瓶颈。

是否有算法可以更快地找到最大特征值,或者优化这部分不会带来太多投资回报?

3个回答

根据最大特征值所需的精度,您可以尝试使用Power Iteration

对于您的具体示例,我会尽量不明确地形成,而是在每次迭代中计算需要操作,而矩阵向量积只需要A=XXTxX(XTx)AO(n3)O(n2)

收敛速度取决于最大的两个特征值之间的分离,因此这可能不是所有情况下的好解决方案,

如果只有 5 个特征值非常显着,Lanczsos 算法与X(XTx)因为矩阵向量乘法应该在 5 个初始步骤后给出快速的线性收敛,因此具有相当准确的最大特征值,迭代次数很少。

对于半正定矩阵,例如A=XXT通过频谱转移加速收敛可能是值得的也就是说,一个合适的标量μ选择和功率方法应用于AμI代替A.

基本功率方法的几次迭代应该会给你一个粗略的估计||Ax||/||x||最大特征值λ1. 假设主要特征值具有多重性 1 并且所有其他特征值都在[0,56λ1], 然后A512λ1I将有一个最大的特征值712λ1其余的在[512λ1,512λ1].

换句话说,您会将最大特征值的优势从下一个最大特征值的 20% 增加到下一个最大特征值(一个绝对值)的 40%。幂法的几何收敛会相应加快。一旦最大特征值AμI被发现有足够的准确性,λ1通过加回班次来估计μ那已经被拿走了。

请注意,您不需要明确地形成AμI因为(AμI)x=X(XTx)μx仍然可以计算O(n2)努力。