Какой самый быстрый способ вычислить наиболее доминирующее собственное значение / единственное значение?

Я знаю только о следующей силовой итерации. Но нужно создать огромную матрицу A'*A, когда строки и столбцы довольно большие. А также является плотной матрицей. Есть ли какая-либо альтернатива мощному итерационному методу ниже? Я слышал о методе подпространства Крылова, но я не знаком с ним. В любом случае я ищу любой более быстрый метод, чем упомянутый ниже:

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 ответ

Решение

Я проверил команду svd в matlab со случайно сгенерированной матрицей 100*100. Это почти в 5 раз быстрее, чем ваш код.

s = svd(A);
n3 = s(1);
Другие вопросы по тегам