2014-02-11 6 views
0

У меня есть следующий код: MatlabSVD qustion MATLAB

r=5; 
[U, Gamma, V] = svd(rand(20,10), 'econ'); 

L1 = U(:,1:r) * Gamma(1:r,1:r) * V(:,1:r)'; 

L2 = zeros(20,10); 
for i=1:r 
    L2 = L2 + Gamma(i)* U(:,i) * V(:,i)'; 
end 

norm(L1-L2,'fro') 

Обычно, L1 должна быть такой же, как L2, и norm(L1-L2,'fro') должны давать ноль в качестве результата. Однако это не тот случай, когда я набираю приведенные выше команды в окне команд Matlab.

Может ли кто-нибудь помочь мне определить проблему здесь?

ответ

2

должно быть

L2 = L2 + Gamma(i,i)* U(:,i) * V(:,i)'; 
+0

Да, 'Gamma' является диагональной матрицей, а не вектор. Другим решением будет включение строки 'Gamma = diag (Gamma);', тогда 'Gamma (i)' будет работать как OP, ожидаемый в цикле. –

+0

Извинения за мою ошибку! – Shawn

Смежные вопросы