這裏是我的測試功能: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