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 |