Main Content

qz

一般化固有値に対する一般化 Schur (QZ) 分解

    説明

    [AA,BB,Q,Z] = qz(A,B) は、正方行列 AB に対して、Q*A*Z = AA かつ Q*B*Z = BB となるような QZ 分解を実行します。

    • AB が実数の場合、AABB疑似上三角行列です。

    • AB が複素数の場合、AABB は三角行列です。

    • QZユニタリ行列です。

    [AA,BB,Q,Z,V,W] = qz(A,B) は、AB のそれぞれ右と左の一般化固有ベクトルを列にもつ行列 VW も返します。

    [___] = qz(A,B,mode) は、mode"real" の場合は実数分解を返し、mode"complex" の場合は可能な複素分解を返します。この構文を、前述の構文の出力引数と任意に組み合わせて使用します。

    すべて折りたたむ

    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*ZBB - Q*B*ZQ'*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 を使用して、AB の一般化固有値と左右の固有ベクトルを計算します。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" と指定して、AB の実数 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
    
    

    入力引数

    すべて折りたたむ

    入力行列。実正方行列または複素正方行列として指定します。AB の次元は同じでなければなりません。

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

    分解モード。次の値のいずれかとして指定します。

    • "complex"qz は可能な複素分解を返し、AABB は三角行列になります。

    • "real"qz は実数分解を返し、AABB疑似三角行列になります。

    出力引数

    すべて折りたたむ

    AB の一般化 Schur 型。上三角正方行列または疑似上三角正方行列として返されます。

    • 分解が複素数で AA が三角行列の場合、対角要素 a = diag(AA)b = diag(BB)A*V*b = B*V*a および b'*W'*A = a'*W'*B を満たす一般化固有値です。

    • 分解が実数で AA が疑似三角行列の場合、非スパース システムの固有値を得るために 2 行 2 列のブロックをさらに減らす必要があります。AA の 2 行 2 列の各ブロックは、BB の同じ位置にある 2 行 2 列の対角ブロックに対応します。

    ユニタリ因子。Q*A*Z = AA および Q*B*Z = BB を満たす正方行列として返されます。

    右固有ベクトル。ペア (A,B) の一般化右固有ベクトルを列にもつ正方行列として返されます。固有ベクトルは A*V = B*V*D を満たします。ここで、D にはペアの一般化固有値が主対角に沿って含まれます。D を返すには関数 eigD の対角要素を返すには関数 ordeig を使用します。

    マシンや MATLAB® のリリースが異なる場合、異なる固有ベクトルが出力されることがありますが、数値的にはいずれも正確です。

    • 実数固有ベクトルでは、固有ベクトルの符号を変更できます。

    • 複素数固有ベクトルでは、絶対値が 1 の任意の複素数を固有ベクトルに乗算できます。

    • 重複固有値では、その固有ベクトルを線形結合によって再結合できます。たとえば、Ax = λx かつ Ay = λy の場合、A(x+y) = λ(x+y) であるため、x+y も A の固有ベクトルです。

    左固有ベクトル。ペア (A,B) の一般化左固有ベクトルを列にもつ正方行列として返されます。固有ベクトルは W'*A = D*W'*B を満たします。ここで、D にはペアの一般化固有値が主対角に沿って含まれます。D を返すには関数 eigD の対角要素を返すには関数 ordeig を使用します。

    マシンや MATLAB のリリースが異なる場合、異なる固有ベクトルが出力されることがありますが、数値的にはいずれも正確です。

    • 実数固有ベクトルでは、固有ベクトルの符号を変更できます。

    • 複素数固有ベクトルでは、絶対値が 1 の任意の複素数を固有ベクトルに乗算できます。

    • 重複固有値では、その固有ベクトルを線形結合によって再結合できます。たとえば、Ax = λx かつ Ay = λy の場合、A(x+y) = λ(x+y) であるため、x+y も A の固有ベクトルです。

    詳細

    すべて折りたたむ

    疑似三角行列

    疑似上三角行列は、実数行列の Schur 分解または一般化 Schur (QZ) 分解の結果として得られます。疑似上三角行列はブロックの上三角行列で、対角上に 1 行 1 列および 2 行 2 列の非ゼロ値のブロックがあります。

    6-by-6 upper quasitriangular matrix with 1-by-1 and 2-by-2 blocks of nonzero values along the diagonal

    これらの対角ブロックの固有値は、この行列の固有値でもあります。1 行 1 列のブロックは実数固有値に対応し、2 行 2 列のブロックは複素共役固有値の組に対応します。

    ユニタリ行列

    可逆の複素正方行列 U は、その共役転置もその逆である場合、つまり U*U=UU*=I であればユニタリです。

    ヒント

    • QZ 分解から、一般化固有値問題 Ax=λBx を解く一般化固有値を計算できます。三角行列 AA については、diag(AA)./diag(BB) を使用して固有値を計算します。疑似三角行列 AA については、ordeig(AA,BB) を使用して固有値を計算します。

    拡張機能

    バージョン履歴

    R2006a より前に導入

    参考

    | | |