基于Matlab的矩阵低秩逼近
考虑一个256 x 256矩阵基于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
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;参见,例如。