繁体   English   中英

MATLAB:查找矩阵和对应列的最大奇异值

[英]MATLAB: Find largest singular values of a matrix and corresponding columns

我有矩阵A和矩阵[U,S,V],因此[U,S,V] = svd(A)。

我如何在matlab中修改脚本以获得与A的10个最大奇异值(即S中的最大值)相对应的U的10列?

谢谢

如果您回想svd的定义,它实际上是在解决一个特征值问题,例如:

Av = su

v是来自矩阵V的右特征向量,而u是来自矩阵U的左特征向量。 s是矩阵S的奇异值。 您知道S是一个对角矩阵,其中的奇异值是按降序排列的。 这样,如果我们采用v的第一列和u的第一列,以及s的第一个奇异值(左上角),则如果执行上述计算,则应使两个输出相同。

举个例子:

rng(123);
A = randn(4,4);
[U,S,V] = svd(A);

format long;
o1 = A*V(:,1);
o2 = S(1,1)*U(:,1);

disp(o1);
disp(o2);

 -0.267557887773137
  1.758696945035771
  0.934255531699997
 -0.978346339659143

 -0.267557887773136
  1.758696945035771
  0.934255531699996
 -0.978346339659143

同样,如果我们用第二个奇异值查看UV的第二列:

o1 = A*V(:,2);
o2 = S(2,2)*U(:,2);
disp(o1);
disp(o2);

 0.353422275717823
-0.424888938462465
 1.543570300948254
 0.613563185406719

 0.353422275717823
-0.424888938462465
 1.543570300948252
 0.613563185406719

这样,基矢量被布置为使得列以与奇异值所指示的顺序相同的顺序从左到右布置。 这样,您只需获取U的前10列。 这可以通过以下方式完成:

out = U(:,1:10);

out将包含基本向量,或列U对应的10个最高奇异值A

首先,对奇异值进行排序,并保存重新索引,然后获取前10个值:

[a, b]=sort(diag(S));
Umax10=U(:,b(1:10));

Rayryeng所述svd以降序输出奇异值,因此:

Umax10=U(:,1:10);

足够。

只需记住,对于eig并非如此,即使eig似乎也输出有序特征值,却并非总是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM