计算最主要特征值/奇异值的最快方法是什么?

时间:2017-05-24 04:57:41

标签: matlab matrix svd eigenvalue norm

我只知道以下的功率迭代。但是当行和列都非常大时,它需要创建一个巨大的矩阵A'* A. A也是一个密集的矩阵。下面的功率迭代方法有什么替代方案吗?我听说过krylov子空间方法,但我不熟悉它。无论如何,我正在寻找比下面提到的更快的方法:

B = A'*A; % or B = A*A' if it is smaller
x = B(:,1); % example of starting point, x will have the largest eigenvector 
x = x/norm(x); 
for i = 1:200 
  y = B*x; 
  y = y/norm(y);
  % norm(x - y); % <- residual, you can try to use it to stop iteration
  x = y; 
end; 
n3 = sqrt(mean(B*x./x)) % translate eigenvalue of B to singular value of A

1 个答案:

答案 0 :(得分:1)

我用100 * 100随机生成的矩阵检查了matlab的'svd'命令。它几乎比你的代码快5倍。

s = svd(A);
n3 = s(1);