qz
一般化固有値に対する一般化 Schur (QZ) 分解
説明
例
3 行 3 列の 2 つの行列の QZ 分解を計算します。
A = [1 7 3; 2 9 12; 5 22 7]; B = [3 1 0; 0 3 1; 0 0 3]; [AA,BB,Q,Z] = qz(A,B)
AA = 3×3
23.5574 1.4134 -14.3485
0 -0.5776 2.7629
0 0 -8.6720
BB = 3×3
3.5845 -0.1090 -0.6024
0 2.7599 0.8430
0 0 2.7292
Q = 3×3
0.2566 0.6353 0.7284
-0.9477 0.3134 0.0604
-0.1899 -0.7058 0.6824
Z = 3×3
0.1502 -0.9664 -0.2088
0.4689 0.2556 -0.8455
0.8704 0.0291 0.4915
AA - Q*A*Z
、BB - Q*B*Z
、Q'*Q - eye(size(Q))
、および Z'*Z - eye(size(Z))
のノルムがマシンの精度内で 0 であることを検証します。
norm(AA - Q*A*Z)
ans = 5.3472e-15
norm(BB - Q*B*Z)
ans = 1.6773e-15
norm(Q'*Q - eye(size(Q)))
ans = 1.0045e-15
norm(Z'*Z - eye(size(Z)))
ans = 4.5298e-16
2 行 2 列の 2 つの行列の QZ 分解を計算し、一般化固有ベクトルも返します。
A = [10 -7; -3 2]; B = [7 3; 12 9]; [AA,BB,Q,Z,V,W] = qz(A,B)
AA = 2×2
11.9600 -4.3532
0 -0.0836
BB = 2×2
1.6381 -2.9374
0 16.4830
Q = 2×2
-0.9597 0.2811
0.2811 0.9597
Z = 2×2
-0.5752 0.8180
0.8180 0.5752
V = 2×2
-0.7031 0.6960
1.0000 1.0000
W = 2×2
-1.0000 0.2929
0.4537 1.0000
Q*A*Z - AA
および Q*B*Z - BB
の要素がマシンの精度内で 0 であることを検証します。
Q*A*Z - AA
ans = 2×2
10-14 ×
0 0.1776
-0.1034 -0.1360
Q*B*Z - BB
ans = 2×2
10-14 ×
-0.0222 0
0.0888 -0.3553
関数 eig
を使用して、A
と B
の一般化固有値と左右の固有ベクトルを計算します。A*V - B*V*D
および W'*A - D*W'*B
の要素がマシンの精度内で 0 であることを検証します。
[V,D,W] = eig(A,B); A*V - B*V*D
ans = 2×2
10-14 ×
0 -0.2297
-0.7105 -0.0860
W'*A - D*W'*B
ans = 2×2
10-14 ×
0.7105 -0.3553
-0.1235 -0.0625
3 行 3 列の 2 つの行列の複素 QZ 分解を計算します。
A = [1/sqrt(2) 1 0; 0 1 1; 0 1/sqrt(2) 1]; B = [0 1 1; -1/sqrt(2) 0 1; 1 -1/sqrt(2) 0]; [AAc,BBc,Qc,Zc] = qz(A,B)
AAc = 3×3 complex
0.5011 - 0.8679i 0.0332 - 1.0852i 0.3687 + 0.9278i
0.0000 + 0.0000i 0.1848 - 0.0000i -0.6334 - 0.3673i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.5590 + 0.9682i
BBc = 3×3 complex
1.0022 + 0.0000i 0.3136 + 0.0711i -0.0280 + 0.5966i
0.0000 + 0.0000i 1.3388 + 0.0000i 0.1572 + 0.6846i
0.0000 + 0.0000i 0.0000 + 0.0000i 1.1180 + 0.0000i
Qc = 3×3 complex
0.5379 + 0.2210i 0.4604 - 0.3553i 0.3214 - 0.4693i
0.2172 + 0.3386i 0.4018 - 0.0188i -0.7698 + 0.2895i
-0.3719 - 0.6014i 0.7068 - 0.0213i -0.0000 - 0.0000i
Zc = 3×3 complex
0.2514 + 0.0413i -0.7279 - 0.4531i -0.4470 - 0.0135i
-0.1000 - 0.6068i 0.3328 - 0.3332i -0.3326 + 0.5379i
0.6391 + 0.3853i 0.1423 - 0.1511i 0.2996 + 0.5570i
mode
を "real"
と指定して、A
と B
の実数 QZ 分解を計算します。A
の一般化 Schur 型が疑似三角行列であり、複素固有値をもつことを示しています。
[AAr,BBr,Qr,Zr] = qz(A,B,"real")
AAr = 3×3
0.1464 1.1759 0.3094
0 1.0360 1.2594
0 -0.8587 0.3212
BBr = 3×3
1.0607 -0.5952 0.1441
0 1.6676 0
0 0 0.8481
Qr = 3×3
0.0000 -0.0000 -1.0000
-0.7882 -0.6154 0.0000
-0.6154 0.7882 -0.0000
Zr = 3×3
-0.7071 0.2610 -0.6572
0.5000 -0.4727 -0.7257
-0.5000 -0.8417 0.2037
三角行列 AAc
について、diag(AA)./diag(BB)
を使用して固有値を計算します。
diag(AAc)./diag(BBc)
ans = 3×1 complex
0.5000 - 0.8660i
0.1381 - 0.0000i
0.5000 + 0.8660i
疑似三角行列 AAr
について、関数 ordeig
を使用して固有値を計算します。
ordeig(AAr,BBr)
ans = 3×1 complex
0.1381 + 0.0000i
0.5000 + 0.8660i
0.5000 - 0.8660i
入力引数
出力引数
ユニタリ因子。Q*A*Z = AA
および Q*B*Z = BB
を満たす正方行列として返されます。
右固有ベクトル。ペア (A,B)
の一般化右固有ベクトルを列にもつ正方行列として返されます。固有ベクトルは A*V = B*V*D
を満たします。ここで、D
にはペアの一般化固有値が主対角に沿って含まれます。D
を返すには関数 eig
、D
の対角要素を返すには関数 ordeig
を使用します。
マシンや MATLAB® のリリースが異なる場合、異なる固有ベクトルが出力されることがありますが、数値的にはいずれも正確です。
実数固有ベクトルでは、固有ベクトルの符号を変更できます。
複素数固有ベクトルでは、絶対値が 1 の任意の複素数を固有ベクトルに乗算できます。
重複固有値では、その固有ベクトルを線形結合によって再結合できます。たとえば、Ax = λx かつ Ay = λy の場合、A(x+y) = λ(x+y) であるため、x+y も A の固有ベクトルです。
左固有ベクトル。ペア (A,B)
の一般化左固有ベクトルを列にもつ正方行列として返されます。固有ベクトルは W'*A = D*W'*B
を満たします。ここで、D
にはペアの一般化固有値が主対角に沿って含まれます。D
を返すには関数 eig
、D
の対角要素を返すには関数 ordeig
を使用します。
マシンや MATLAB のリリースが異なる場合、異なる固有ベクトルが出力されることがありますが、数値的にはいずれも正確です。
実数固有ベクトルでは、固有ベクトルの符号を変更できます。
複素数固有ベクトルでは、絶対値が 1 の任意の複素数を固有ベクトルに乗算できます。
重複固有値では、その固有ベクトルを線形結合によって再結合できます。たとえば、Ax = λx かつ Ay = λy の場合、A(x+y) = λ(x+y) であるため、x+y も A の固有ベクトルです。
詳細
疑似上三角行列は、実数行列の Schur 分解または一般化 Schur (QZ) 分解の結果として得られます。疑似上三角行列はブロックの上三角行列で、対角上に 1 行 1 列および 2 行 2 列の非ゼロ値のブロックがあります。
これらの対角ブロックの固有値は、この行列の固有値でもあります。1 行 1 列のブロックは実数固有値に対応し、2 行 2 列のブロックは複素共役固有値の組に対応します。
可逆の複素正方行列 U
は、その共役転置もその逆である場合、つまり であればユニタリです。
ヒント
QZ 分解から、一般化固有値問題 を解く一般化固有値を計算できます。三角行列
AA
については、diag(AA)./diag(BB)
を使用して固有値を計算します。疑似三角行列AA
については、ordeig(AA,BB)
を使用して固有値を計算します。
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
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)