考虑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
近似值。
我的问题是如何创建一个向量E
,
E(k) = norm(A-Ak)
k=1,2,3.....,256
。即E
是256个元素的列向量,每个元素都是norm(A-Ak)
答案 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; 子>