这里是我的测试功能:svds不适用于某些矩阵?
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应该如何工作稀疏矩阵,或者是这些函数有问题吗?
WOW ......我们在想这一切的时候怎么可能,我们的矩阵是秩6.我只想说:我觉得愚蠢。感谢您为我们节省了大量时间。 – user1956609 2013-04-06 00:12:47