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.3195 -0.8265 -0.0211 -0.4552 -0.0843
-0.6218 0.5235 0.1942 -0.5408 0.0956
0.0078 0.1086 0.1410 -0.0271 -0.9836
0.6610 0.0195 0.5110 -0.5408 0.0956
0.2725 0.1750 -0.8251 -0.4552 -0.0843
X = 5×5
-10.0949 0.5430 0.7052 -30.7287 -4.6958
2.1067 -13.1846 -7.4097 -28.5003 -11.6858
14.8016 8.9942 -7.7470 -26.2720 -18.6758
3.3206 3.6474 14.4515 -24.0436 -25.6657
-10.1340 0 0.0000 -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
1017 ×
0.0000
0.0000
1.7650
Inf
Inf
入力引数
入力行列。A および B は、列数が同じでなければなりませんが、行数は異なっていてもかまいません。
データ型: single | double
複素数のサポート: あり
出力引数
ユニタリ行列の因子。行列として返されます。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)列になります。
行列の因子。行列として返されます。A が m 行 p 列で、B が n 行 p 列である場合、X は p 行 q 列になります。ここで、q は [A; B] の数値的ランクです。
X の性質は norm([A; B]) == norm(X) となっています。これは、U、V、C、および 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" オプションの指定の有無によって異なります。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] の数値的ランクです。
一般化特異値。列ベクトルとして返されます。sv = max(S,[],1) および cv = max(C,[],1) の場合、A および B の一般化特異値は比率 cv./sv に等しくなります。
sigma の長さは [A; B] の数値的ランクに等しく、非降順に並べられています。
アルゴリズム
関数 gsvd で実行される一般化特異値分解は、C-S 分解、および組み込み関数 svd と qr を使用します。
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入A が m 行 p 列、B が n 行 p 列である関数呼び出し [U,V,X,C,S] = gsvd(A,B) では、関数 gsvd は以下を返します。
p行q列としてのXm行q列としてのCn行q列としてのS
さらに、1 つの出力引数を指定した関数呼び出し sigma = gsvd(A,B) は、長さ q の一般化特異値のベクトルを返します。
これらすべてのケースにおいて、q が [A; B] の数値的ランクと等しくなるように動作が変更されています。数値的ランクは、[A; B] の QR 分解から計算されます。この変更により、C および S の非ゼロ要素が必ず一意に決定されます。
以前は、[A; B] がフル ランクではない場合、q の値は min(m+n,p) となり、gsvd は出力で余分な列 (または要素) を返しました。
構文 [U,V,X,C,S] = gsvd(A,B,0) は引き続きサポートされますが、推奨されなくなりました。代わりに "econ" オプションを使用して、エコノミーサイズの分解を実行してください。
"econ" オプションを使用して、gsvd でエコノミーサイズの分解を計算します。この機能は、gsvd(A,B,0) と同じです。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)