Быстрый способ восстановить ведущие единичные векторы - PullRequest
0 голосов
/ 16 июня 2019

Учитывая матрицу, существует ли быстрый алгоритм для восстановления ведущих сингулярных векторов, т.е. найти ближайшую матрицу ранга 1, ближайшую к матрице в норме Фробениуса?

Под быстрым алгоритмом я имею в виду все, что быстрее:

  [U, S, V] = svd(A);
  A1 = U(:,1)*S(1,1)*V(:,1)';

1 Ответ

0 голосов
/ 17 июня 2019

Таким образом, power mode может использоваться для этой цели:

C = A*A';
v1 = power_method(C);
v2 = nanmean(A./v1,1)';
A1 = v1*v2';

, но в моих экспериментах он не всегда быстрее, чем у высокооптимизированного полного SVD:

[U,S,V] = svd(A); 
A1 = U(:,1)*S(1,1)*V(:,1)';

но я думаю, что для больших матриц это может работать лучше.

...