【问题标题】:matlab SVD qustionmatlab SVD问题
【发布时间】:2014-02-11 12:02:14
【问题描述】:

我有以下 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 命令窗口中键入上述命令时,情况并非如此。

谁能帮我找出这里的问题?

【问题讨论】:

    标签: matlab svd


    【解决方案1】:

    应该是

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

    【讨论】:

    • 是的,Gamma 是对角矩阵,而不是向量。另一个解决方法是包含Gamma = diag(Gamma); 行,然后Gamma(i) 将在循环中按OP 预期工作。
    • 为我的错误道歉!
    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 2014-06-29
    • 2020-07-12
    • 2020-05-23
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多