qz
一般化固有値に対する一般化 Schur (QZ) 分解
説明
例
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 = 1.1982e-14
norm(BB - Q*B*Z)
ans = 2.6332e-15
norm(Q'*Q - eye(size(Q)))
ans = 4.4784e-16
norm(Z'*Z - eye(size(Z)))
ans = 7.2042e-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
複素 QZ 分解
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
入力引数
出力引数
AA
, BB
— A
と B
の一般化 Schur 型
正方行列
Q
, Z
— ユニタリ因子
正方行列
ユニタリ因子。Q*A*Z = AA
および Q*B*Z = BB
を満たす正方行列として返されます。
V
— 右固有ベクトル
正方行列
右固有ベクトル。ペア (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 の固有ベクトルです。
W
— 左固有ベクトル
正方行列
左固有ベクトル。ペア (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® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
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)