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