Main Content

gsvd

特異値分解の一般化

説明

[U,V,X,C,S] = gsvd(A,B) は、行列 A および B の一般化特異値分解を実行し、以下の関係を満たすユニタリ行列 UV、行列 X、および非負対角行列 CS を返します。

A = U*C*X'
B = V*S*X'
C'*C + S'*S = I 

[U,V,X,C,S] = gsvd(A,B,"econ") (Amp 列、Bnp 列) は、結果の U および V 行列が p 列以下、C および Sp 行以下になるようにエコノミーサイズの分解を行います。

[U,V,X,C,S] = gsvd(A,B,0) は、gsvd(A,B,"econ") と同じです。この構文の使用は推奨されません。代わりに "econ" オプションを使用してください。

sigma = gsvd(A,B) は一般化特異値のベクトル sqrt(diag(C'*C)./diag(S'*S)) を返します。B が正方で正則の場合、一般化特異値 gsvd(A,B) は、通常特異値 svd(A/B) に対応しますが、これらは逆の順番で並べ替えされます。これらの逆数は gsvd(B,A) です。

すべて折りたたむ

2 つの行列に対して一般化特異値分解を実行し、一般化特異値も計算します。

5 行 3 列の行列 A と 3 行 3 列の行列 B を作成します。

A = reshape(1:15,5,3)
A = 5×3

     1     6    11
     2     7    12
     3     8    13
     4     9    14
     5    10    15

B = magic(3)
B = 3×3

     8     1     6
     3     5     7
     4     9     2

A および B に対して一般化特異値分解を実行します。出力には、直交行列 U および V、正則行列 X、対角行列 C および S が含まれます。A はランク落ちであるため、C の最初の対角要素はゼロです。

[U,V,X,C,S] = gsvd(A,B)
U = 5×5

   -0.1882    0.6457   -0.4279   -0.4268   -0.4271
    0.6897    0.3296   -0.4375    0.2067    0.4261
   -0.6849    0.0135   -0.4470    0.2542    0.5160
    0.0534   -0.3026   -0.4566    0.5787   -0.6019
    0.1300   -0.6187   -0.4661   -0.6128    0.0869

V = 3×3

   -0.7071   -0.6946    0.1325
    0.0000   -0.1874   -0.9823
    0.7071   -0.6946    0.1325

X = 3×3

   -2.8284   -9.3761   -6.9346
    5.6569   -8.3071  -18.3301
   -2.8284   -7.2381  -29.7256

C = 5×3

    0.0000         0         0
         0    0.3155         0
         0         0    0.9807
         0         0         0
         0         0         0

S = 3×3

    1.0000         0         0
         0    0.9489         0
         0         0    0.1957

次に、A および B のエコノミーサイズの分解を実行します。行列 U と行列 C のサイズは異なりますが、他の出力行列は同じです。

[U,V,X,C,S] = gsvd(A,B,"econ")
U = 5×3

   -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

V = 3×3

   -0.7071    0.6946   -0.1325
    0.0000    0.1874    0.9823
    0.7071    0.6946   -0.1325

X = 3×3

   -2.8284    9.3761    6.9346
    5.6569    8.3071   18.3301
   -2.8284    7.2381   29.7256

C = 3×3

         0         0         0
         0    0.3155         0
         0         0    0.9807

S = 3×3

    1.0000         0         0
         0    0.9489         0
         0         0    0.1957

一般化特異値を計算します。この場合、一般化特異値は比率 diag(C)./diag(S) に等しくなります。これらの値は、svd(A/B) で返された通常の特異値を並べ替えたものです。

sigma = gsvd(A,B)
sigma = 3×1

    0.0000
    0.3325
    5.0123

svals = svd(A/B)
svals = 3×1

    5.0123
    0.3325
    0.0000

一般化特異値が Inf になることがある理由を調べます。

3 行 5 列の行列 A および 5 行 5 列の行列 B を作成します。

A = reshape(1:15,3,5)
A = 3×5

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15

B = magic(5)
B = 5×5

    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

A および B に対して一般化特異値分解を実行します。出力には、直交行列 U および V、正則行列 X、対角行列 C および S が含まれます。この場合、C の非ゼロ対角は diag(C,2) です。

[U,V,X,C,S] = gsvd(A,B)
U = 3×3

    0.4082    0.7178   -0.5639
   -0.8165    0.0109   -0.5772
    0.4082   -0.6961   -0.5906

V = 5×5

   -0.7596    0.3266    0.3195   -0.4552   -0.0843
    0.4139   -0.3747    0.6218   -0.5408    0.0956
    0.0484   -0.1713   -0.0078   -0.0271   -0.9836
   -0.1717   -0.4817   -0.6610   -0.5408    0.0956
    0.4689    0.7011   -0.2725   -0.4552   -0.0843

X = 5×5

    0.2422   -0.8564   10.0949  -30.7287   -4.6958
   -9.4897   11.7764   -2.1067  -28.5003  -11.6858
   11.2281    3.8525  -14.8016  -26.2720  -18.6758
   -1.9806  -14.7725   -3.3206  -24.0436  -25.6657
         0         0   10.1340  -21.8152  -32.6557

C = 3×5

         0         0    0.0000         0         0
         0         0         0    0.0439         0
         0         0         0         0    0.7432

S = 5×5

    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

一般化特異値を求めます。ゼロが含まれています。

sigma = gsvd(A,B)
sigma = 5×1

         0
         0
    0.0000
    0.0439
    1.1109

AB の順番を逆にすると、これらの値は逆数になり、Inf 値になります。

sigma2 = gsvd(B,A)
sigma2 = 5×1
1016 ×

    0.0000
    0.0000
    3.8423
       Inf
       Inf

入力引数

すべて折りたたむ

入力行列。A および B は、列数が同じでなければなりませんが、行数は異なっていてもかまいません。

データ型: single | double
複素数のサポート: あり

出力引数

すべて折りたたむ

ユニタリ行列の因子。行列として返されます。U および V は、それぞれ AB の列の基底となる直交列をもつ行列です。

U および V のサイズは "econ" オプションの指定の有無によって異なります。Amp 列で、Bnp 列の場合:

  • 既定では、Umm 列になり、Vnn 列になります。

  • "econ" オプションを指定した場合、Ummin(m,p) 列になり、Vnmin(n,p) 列になります。

行列の因子。行列として返されます。Amp 列で、Bnp 列である場合、Xpq 列になります。ここで、q[A; B] の数値的ランクです。

X の性質は norm([A; B]) == norm(X) となっています。これは、UVC、および S が行列 [A; B] の直行基底のみを表すためです。

対角行列の因子。行列として返されます。S の非ゼロ要素は、常に主対角上にあります。C の非ゼロ要素は対角 diag(C,max(0,size(C,2)-size(C,1))) 上にあります。非ゼロの値を取得するには、コマンド sv = max(S,[],1) および cv = max(C,[],1) を使用します。A および B の一般化特異値は比率 cv./sv に等しくなります。

C および S のサイズは "econ" オプションの指定の有無によって異なります。Amp 列で、Bnp 列の場合:

  • 既定では、Cmq 列になり、Snq 列になります。

  • "econ" オプションを指定した場合、Cmin(m,p)q 列になり、Vmin(n,p)q 列になります。

いずれの場合も、q[A; B] の数値的ランクです。

一般化特異値。列ベクトルとして返されます。sv = max(S,[],1) および cv = max(C,[],1) の場合、A および B の一般化特異値は比率 cv./sv に等しくなります。

sigma の長さは [A; B] の数値的ランクに等しく、非降順に並べられています。

アルゴリズム

関数 gsvd で実行される一般化特異値分解は、C-S 分解、および組み込み関数 svdqr を使用します。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する

参考

|