MATLAB Function Reference | ![]() ![]() |
表示
[U,V,X,C,S] = gsvd(A,B) [U,V,X,C,S] = gsvd(A,B,0) sigma = gsvd(A,B)
詳細
[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
行p
列で、Bがn
行p
列ならば、q = min(m+n,p)
のとき、U
はm
行m
列で、Vは
n
行n
列、X
はp
行q
列です。
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)
は、3個の入力引数をもち、 m >= p
または n >= p
のとき、結果のU
とV
が多くてもp列で、C
とS
が多くてもp
行であるような、メモリ消費をおさえた分解を行います。一般化特異値は、diag(C)./diag(S)
です。
B
が正方で正則の場合、一般化特異値 gsvd(A,B)
は、通常特異値svd(A/B)
と等しいですが、逆の順番にソートされます。これらの逆数は、gsvd(B,A)
です。
このgsvd
の式では、A
またはB
の個々のランクに関する仮定は行われません。行列X
は、行列 [A;B]
がフルランクである場合のみにフルランクです。実際に、svd(X)
とcond(X)
は、 svd([A;B])
とcond([A;B])
と等価です。G. Golub and C. Van Loan [1],のような他の式では、null(A)
とnull(B)
はオーバラップせず、X
がinv(X)
またはinv(X')
で置き換えられる必要があります。
しかし、null(A)
とnull(B)
がオーバラップするとき、 C
と S
の非ゼロ要素は、一意的には決定されません。
例題
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行5列の直交行列U
、3行3列の直交行列V
、3行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
は、フルランクでないので、C
の最初の対角要素はゼロです。
[U,V,X,C,S] = gsvd(A,B,0)
U = -0.3736 -0.6457 -0.4279 -0.0076 -0.3296 -0.4375 0.8617 -0.0135 -0.4470 -0.2063 0.3026 -0.4566 -0.2743 0.6187 -0.4661 C = 0.0000 0 0 0 0.3155 0 0 0 0.9807
他の3個の行列V
, X
,S
は、フル分解で得られた行列と同じです。
sigma = gsvd(A,B) sigma = 0.0000 0.3325 5.0123
これらの値は、通常の特異値svd(A/B)を並べ替えたものです。
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行3列の直交行列U
、5行5列の直交行列V
、5行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)
です。一般化特異値は、3個の0を含みます。
sigma = gsvd(A,B) sigma = 0 0 0.0000 0.0439 1.1109
A
とB
の順番を逆にすると、3つの値は逆数になり、3つのInfを出力します。
gsvd(B,A) ans = 0.9001 22.7610 Inf Inf Inf
アルゴリズム
一般化特異値分解は、組み込みの関数svd
とqr
と、[1]で記述されたC-S分解を使用します。C-S分解は、M-ファイルgsvd
内のサブファンクションで実現されています。
診断
gsvd
で生成する唯一のワーニングメッセージまたはエラーメッセージは、2つの入力引数が同じ列数でないときに出力されます。
参考文献
[1] Golub, Gene H. and Charles Van Loan, Matrix Computations, Third Edition, Johns Hopkins University Press, Baltimore, 1996
参考
![]() | griddatan | gtext | ![]() |