| MATLAB Function Reference | ![]() |
廣義的奇異值分解(Generalized singular value decomposition)
Syntax
[U,V,X,C,S] = gsvd(A,B) [U,V,X,C,S] = gsvd(A,B,0) sigma = gsvd(A,B)
Description
[U,V,X,C,S] = gsvd(A,B)
傳回么正矩陣 U 與 V,方陣 X(通常是),和非負的對角矩陣 C 與 S 使得
A = U*C*X' B = V*S*X' C'*C + S'*S = I
A 與 B 的行數一定要一樣,但是列數可能會不一樣。若 A 是 m-by-p 和 B 是 n-by-p,則 U 是 m-by-m, V 是 n-by-n 且 X 是 p-by-q , q = min(m+n,p)。
sigma = gsvd(A,B)
傳回廣義奇異值的向量, sqrt(diag(C'*C)./diag(S'*S))。
S 的非零元素一定在它的主對角線上。若 m >= p 則 C 中的非零元素也會在它的主對角線上。但要是 m < p,則 C 中的非零對角線是在 diag(C,p-m)。這樣可以讓對角線上的元素,廣義的奇異值,呈遞減的排列。
gsvd(A,B,0),有三個輸入的參數,不是 m 就是 n >= p。會產生 "economy-sized" 的分解,也就是 U 與 V 最多只有 p 行, C 與 S 最多只有 p 列。廣義的奇異值為 diag(C)./diag(S)。
當 B 為一方陣且非奇異時,廣義奇異值, gsvd(A,B),會和一般的奇異值相等, svd(A/B) ,但是輸入的參數順序不同 ( gsvd(B,A) )。
在算 gsvd 時,與個別的 A 或 B 的 rank 其實沒什麼關聯性。矩陣 X 有 full rank 若且為若矩陣 [A;B] 有 full rank。事實上, svd(X) 與 cond(X) 相等於 svd([A;B]) 與 cond([A;B])。而其他像 G. Golub 與 C. Van Loan [1],則需要 null(A) 和 null(B) 不重疊且用 inv(X) 或 inv(X') 置換 X 。
另外,有一點需要注意,就是當 null(A) 與 null(B) 重疊時, C 與 S 中的非零元素不是唯一被決定的。
Examples
A = reshape(1:15,5,3)
B = magic(3)
A =
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
B =
8 1 6
3 5 7
4 9 2
[U,V,X,C,S] = gsvd(A,B)
會產生一個 5-by-5 的正交矩陣 U, 一個 3-by-3 的正交矩陣 V, 和一個 3-by-3 的非奇異矩陣X,
X =
2.8284 -9.3761 -6.9346
-5.6569 -8.3071 -18.3301
2.8284 -7.2381 -29.7256
C =
0.0000 0 0
0 0.3155 0
0 0 0.9807
0 0 0
0 0 0
S =
1.0000 0 0
0 0.9489 0
0 0 0.1957
因為 A 的 rank 為有缺陷的(deficient),所以 C 的對角線上第一個元素為零。
[U,V,X,C,S] = gsvd(A,B,0)
會產生一個 5-by-3 的矩陣 U 和一個 3-by-3 的矩陣 C。
U =
0.5700 -0.6457 -0.4279
-0.7455 -0.3296 -0.4375
-0.1702 -0.0135 -0.4470
0.2966 0.3026 -0.4566
0.0490 0.6187 -0.4661
C =
0.0000 0 0
0 0.3155 0
0 0 0.9807
而其他三個矩陣, V, X, 與 S 與前面作 full decomposition 的結果相同。
sigma = gsvd(A,B)
sigma =
0.0000
0.3325
5.0123
svd(A/B)
ans =
5.0123
0.3325
0.0000
A = reshape(1:15,3,5)
B = magic(5)
A =
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
B =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
[U,V,X,C,S] = gsvd(A,B)
會產生一個 3-by-3 的正交矩陣 U, 一個 5-by-5 的正交矩陣 V, 一個 5-by-5 的非奇異矩陣 X 和
C =
0 0 0.0000 0 0
0 0 0 0.0439 0
0 0 0 0 0.7432
S =
1.0000 0 0 0 0
0 1.0000 0 0 0
0 0 1.0000 0 0
0 0 0 0.9990 0
0 0 0 0 0.6690
在這個情況下,C 的非零對角線為 diag(C,2)。廣義的奇異值包含三個零。
sigma = gsvd(A,B)
sigma =
0
0
0.0000
0.0439
1.1109
gsvd(B,A)
ans =
1.0e+016 *
0.0000
0.0000
4.4126
Inf
Inf
Algorithm
廣義的奇異值分解是用 C-S 分解,可參考 [1]。C-S 分解是在 gsvd M-file 中的一個副程式。
Diagnostics
唯一的警告或錯誤訊息,是當輸入的兩個參數中行數不同,才會造成。
See Also
References
[1] Golub, Gene H. and Charles Van Loan, Matrix Computations, Third Edition, Johns Hopkins University Press, Baltimore, 1996
| griddatan | gtext | ![]() |