基于Matlab的矩阵低秩逼近

时间:2015-02-17 21:26:05

标签: matlab matrix linear-algebra svd

考虑256 x 256矩阵A。我熟悉如何使用SVD计算A的低等级近似值。

通常在使用[U S V] = svd(A)后,我会使用Ak = U(:,1:k)*S(1:k,1:k)*V(:,1:k)';来获得k的等级A近似值。

我的问题是如何创建一个向量EE(k) = norm(A-Ak) k=1,2,3.....,256。即E是256个元素的列向量,每个元素都是norm(A-Ak)

1 个答案:

答案 0 :(得分:7)

答案就是

diag(S)

为什么?

sa theorem 1 表示矩阵A及其排名 - k近似Ak之间的误差a(谱)范数 2 k+1 - 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

<子> 1 实际上直到几分钟前我才知道这个定理。我刚刚计算了norm(A-Ak)并注意到结果值在S那么我认为必须有一个定理来建立这个。

<子> 2 感谢@AlgebraicPavel进行更正。

<子> 3 &#34; 代数很慷慨;她经常给出比她更多的东西。&#34;