【发布时间】:2013-04-05 23:37:40
【问题描述】:
这是我的测试功能:
function diff = svdtester()
y = rand(500,20);
[U,S,V] = svd(y);
%{
y = sprand(500,20,.1);
[U,S,V] = svds(y);
%}
diff_mat = y - U*S*V';
diff = mean(abs(diff_mat(:)));
end
有两个非常相似的部分:一个找到随机矩阵的 SVD,另一个找到随机稀疏矩阵的 SVD。无论您选择注释哪一个(现在第二个已被注释掉),我们都会计算原始矩阵与其 SVD 分量乘积之间的差值,并返回平均绝对差值。
使用 rand/svd 时,典型的返回(平均误差)值在 8.8e-16 左右,基本上为零。使用 sprand/svds 时,典型的返回值在 0.07 左右,考虑到稀疏矩阵开始时 90% 是 0,这相当糟糕。
我是否误解了 SVD 应该如何处理稀疏矩阵,或者这些函数有什么问题?
【问题讨论】:
标签: matlab linear-algebra