基于Matlab的矩阵低秩逼近

基于Matlab的矩阵低秩逼近,matlab,matrix,linear-algebra,svd,Matlab,Matrix,Linear Algebra,Svd,考虑一个256 x 256矩阵a。我熟悉如何使用SVD计算A的低阶近似值 通常在使用[usv]=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) 为什么? 有一个1表示矩阵a与其秩-k近似值Ak之间的误差有一个由k+1第个奇异值a给出的(光谱)范数2

考虑一个256 x 256矩阵
a
。我熟悉如何使用SVD计算
A
的低阶近似值

通常在使用
[usv]=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)
为什么?

有一个1表示矩阵
a
与其秩-
k
近似值
Ak
之间的误差有一个由
k+1
第个奇异值
a
给出的(光谱)范数2。也就是说,误差由第一个未使用的奇异值给出。这不是一个奇妙的结果吗

例如:

>> 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

一, 事实上,我直到几分钟前才知道这个定理。我刚刚计算了
norm(A-Ak)
并注意到结果值在
S
中。然后我想一定有一个定理证明了这一点。

二, 谢谢你的更正。

三, “代数是慷慨的;她付出的往往比别人要求的要多。”

实际上,链接页面上有一个错误/打字错误。最接近秩k近似值的距离实际上是
k+1
-次奇异值,但在光谱范数(这是Matlab的
norm
默认计算的)中测量时,不是Frobenius;参见,例如。