[英]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
同樣,如果我們用第二個奇異值查看U
和V
的第二列:
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.