我有一个程序,通过对所有实数对称 50x50 矩阵执行奇异值分解来计算它们的最大特征值。SVD 是程序中的瓶颈。
是否有算法可以更快地找到最大特征值,或者优化这部分不会带来太多投资回报?
我有一个程序,通过对所有实数对称 50x50 矩阵执行奇异值分解来计算它们的最大特征值。SVD 是程序中的瓶颈。
是否有算法可以更快地找到最大特征值,或者优化这部分不会带来太多投资回报?
根据最大特征值所需的精度,您可以尝试使用Power Iteration。
对于您的具体示例,我会尽量不明确地形成,而是在每次迭代中计算需要操作,而矩阵向量积只需要。
收敛速度取决于最大的两个特征值之间的分离,因此这可能不是所有情况下的好解决方案,
如果只有 5 个特征值非常显着,Lanczsos 算法与因为矩阵向量乘法应该在 5 个初始步骤后给出快速的线性收敛,因此具有相当准确的最大特征值,迭代次数很少。
对于半正定矩阵,例如通过频谱转移加速收敛可能是值得的。也就是说,一个合适的标量选择和功率方法应用于代替.
基本功率方法的几次迭代应该会给你一个粗略的估计最大特征值. 假设主要特征值具有多重性 1 并且所有其他特征值都在, 然后将有一个最大的特征值其余的在.
换句话说,您会将最大特征值的优势从下一个最大特征值的 20% 增加到下一个最大特征值(一个绝对值)的 40%。幂法的几何收敛会相应加快。一旦最大特征值被发现有足够的准确性,通过加回班次来估计那已经被拿走了。
请注意,您不需要明确地形成因为仍然可以计算努力。