MATLAB Function Reference    
gsvd

一般化特異値分解

表示

詳細

[U,V,X,C,S] = gsvd(A,B) は、つぎのようなユニタリ行列UV、(通常)正方行列X、非負対角行列CSを出力します。

ABは、同じ列数が同じで、行数は異なってもかまいません。Amp列で、Bがnp列ならば、q = min(m+n,p)のとき、Umm列で、Vはnn列、Xpq列です。

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のとき、結果のUVが多くてもp列で、CSが多くても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)はオーバラップせず、Xinv(X)またはinv(X')で置き換えられる必要があります。

しかし、null(A)null(B) がオーバラップするとき、 CSの非ゼロ要素は、一意的には決定されません。

例題

最初の例では、行列は少なくとも列数と同じ行数をもちます。

ステートメント

は、5行5列の直交行列U、3行3列の直交行列V、3行3列の正則行列Xを出力します。

と、つぎの行列も出力します。

A は、フルランクでないので、Cの最初の対角要素はゼロです。

メモリ消費をおさえた分解

は、5行3列の行列Uと、3行3列の行列Cを出力します。

他の3個の行列V, X,Sは、フル分解で得られた行列と同じです。

一般化特異値は、CSの対角要素の比です。

これらの値は、通常の特異値svd(A/B)を並べ替えたものです。

2番目の例では、列数は、少なくとも行数と同じです。

ステートメント

は、3行3列の直交行列U、5行5列の直交行列V、5行5列の正則行列Xと、つぎの行列を作成します。

この場合、Cの非ゼロ対角は、diag(C,2)です。一般化特異値は、3個の0を含みます。

ABの順番を逆にすると、3つの値は逆数になり、3つのInfを出力します。

アルゴリズム

一般化特異値分解は、組み込みの関数svdqrと、[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

参考

svd


 griddatan gtext