Exc*_*Exc 3 matlab matrix linear-algebra svd
考虑256 x 256矩阵A.我很熟悉如何计算A使用SVD的低等级近似值.
通常在使用之后[U S V] = svd(A),我会用它Ak = U(:,1:k)*S(1:k,1:k)*V(:,1:k)';来得到等级k近似值A.
我的问题是如何创建一个矢量E,
E(k) = norm(A-Ak)以便k=1,2,3.....,256.这是E一个256个元素的列向量,每个元素都是norm(A-Ak)
答案很简单
diag(S)
Run Code Online (Sandbox Code Playgroud)
为什么?
有一个定理1表明矩阵A与其秩k近似之间的误差Ak具有(谱)范数2,由k+1-th奇异值给出A.也就是说,误差由第一个未使用的奇异值给出.这不是一个很好的3结果吗?
例:
>> A = randn(8,8);
>> [U S V] = svd(A);
>> k = 5;
>> Ak = U(:,1:k)*S(1:k,1:k)*V(:,1:k)'; %'// rank-5 approximation
>> norm(A-Ak) %// its associated error norm
ans =
1.0590
>> k = 6;
>> Ak = U(:,1:k)*S(1:k,1:k)*V(:,1:k)'; %'// rank-6 approximation
>> norm(A-Ak) %// its associated error norm
ans =
0.3924
>> diag(S).' %'// all error norms
ans =
4.5528 3.2398 2.5863 2.2031 1.4252 1.0590 0.3924 0.1021
Run Code Online (Sandbox Code Playgroud)
1
实际上,直到几分钟前我才知道这个定理.我刚刚计算norm(A-Ak)并注意到结果值是S.然后我认为必须有一个定理来建立这个.
2 感谢@AlgebraicPavel进行更正.
3 " 代数是慷慨的;她经常给出比她更多的代词. "