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.
Может ли кто-нибудь помочь мне определить проблему здесь?
Да, 'Gamma' является диагональной матрицей, а не вектор. Другим решением будет включение строки 'Gamma = diag (Gamma);', тогда 'Gamma (i)' будет работать как OP, ожидаемый в цикле. –
Извинения за мою ошибку! – Shawn