gsvd
特異値分解の一般化
説明
例
行列の一般化特異値分解
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
A
と B
の順番を逆にすると、これらの値は逆数になり、Inf
値になります。
sigma2 = gsvd(B,A)
sigma2 = 5×1
1016 ×
0.0000
0.0000
3.8423
Inf
Inf
入力引数
A
, B
— 入力行列 (個別の引数として)
行列
入力行列。A
および B
は、列数が同じでなければなりませんが、行数は異なっていてもかまいません。
データ型: single
| double
複素数のサポート: あり
出力引数
U
, V
— ユニタリ行列の因子
行列
ユニタリ行列の因子。行列として返されます。U
および V
は、それぞれ A
と B
の列の基底となる直交列をもつ行列です。
U
および V
のサイズは "econ"
オプションの指定の有無によって異なります。A
が m
行 p
列で、B
が n
行 p
列の場合:
既定では、
U
はm
行m
列になり、V
はn
行n
列になります。"econ"
オプションを指定した場合、U
はm
行min(m,p)
列になり、V
はn
行min(n,p)
列になります。
X
— 行列の因子
行列
行列の因子。行列として返されます。A
が m
行 p
列で、B
が n
行 p
列である場合、X
は p
行 q
列になります。ここで、q
は [A; B]
の数値的ランクです。
X
の性質は norm([A; B]) == norm(X)
となっています。これは、U
、V
、C
、および S
が行列 [A; B]
の直行基底のみを表すためです。
C
, S
— 対角行列の因子
行列
対角行列の因子。行列として返されます。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"
オプションの指定の有無によって異なります。A
が m
行 p
列で、B
が n
行 p
列の場合:
既定では、
C
はm
行q
列になり、S
はn
行q
列になります。"econ"
オプションを指定した場合、C
はmin(m,p)
行q
列になり、V
はmin(n,p)
行q
列になります。
いずれの場合も、q
は [A; B]
の数値的ランクです。
sigma
— 一般化特異値
列ベクトル
一般化特異値。列ベクトルとして返されます。sv = max(S,[],1)
および cv = max(C,[],1)
の場合、A
および B
の一般化特異値は比率 cv./sv
に等しくなります。
sigma
の長さは [A; B]
の数値的ランクに等しく、非降順に並べられています。
アルゴリズム
関数 gsvd
で実行される一般化特異値分解は、C-S 分解、および組み込み関数 svd
と qr
を使用します。
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入R2022b: 数値的ランクに基づいた出力サイズ
A
が m
行 p
列、B
が n
行 p
列である関数呼び出し [U,V,X,C,S] = gsvd(A,B)
では、関数 gsvd
は以下を返します。
p
行q
列としてのX
m
行q
列としてのC
n
行q
列としてのS
さらに、1 つの出力引数を指定した関数呼び出し sigma = gsvd(A,B)
は、長さ q
の一般化特異値のベクトルを返します。
これらすべてのケースにおいて、q
が [A; B]
の数値的ランクと等しくなるように動作が変更されています。数値的ランクは、[A; B]
の QR 分解から計算されます。この変更により、C
および S
の非ゼロ要素が必ず一意に決定されます。
以前は、[A; B]
がフル ランクではない場合、q
の値は min(m+n,p)
となり、gsvd
は出力で余分な列 (または要素) を返しました。
R2022b: エコノミーサイズの分解に "0" 構文は非推奨
構文 [U,V,X,C,S] = gsvd(A,B,0)
は引き続きサポートされますが、推奨されなくなりました。代わりに "econ"
オプションを使用して、エコノミーサイズの分解を実行してください。
R2022a: エコノミーサイズの分解のオプション
"econ"
オプションを使用して、gsvd
でエコノミーサイズの分解を計算します。この機能は、gsvd(A,B,0)
と同じです。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)