我有以下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命令窗口中键入上述命令时,情况并非如此。
有人可以帮我在这里找出问题吗?
答案 0 :(得分:2)
应该是
L2 = L2 + Gamma(i,i)* U(:,i) * V(:,i)';