Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

固有値

固有値分解

正方行列 A の "固有値" と "固有ベクトル" は、次の関係を満たすスカラー λ とゼロ以外のベクトル υ で表します。

Aυ = λυ。

対角行列 Λ の対角要素に固有値を配置し、行列 V の列に対応する固有ベクトルを配置すると、次のような関係になります。

AV = VΛ。

V が特異でない場合、これは固有値分解になります。

A = VΛV–1

この微分方程式 dx/dt = Ax の係数行列は良い例です。

A =
     0    -6    -1
     6     2   -16
    -5    20   -10

この方程式の解は、行列指数 x(t) = etAx(0) で表されます。ステートメント

lambda = eig(A)

は、A の固有値を含む列ベクトルを作成します。この行列の例の固有値は複素数になります。

lambda =
     -3.0710         
     -2.4645+17.6008i
     -2.4645-17.6008i

各固有値の実数部は負で、eλt は t が増加するとゼロに近づきます。2 つの固有値のゼロ以外の虚数部 ±ω は、微分方程式の解の振動構成成分 sin(ωt) に関連します。

2 つの出力引数を設定すると eig は固有ベクトルを計算し、対角に固有値を出力します。

[V,D] = eig(A)
V =
  -0.8326         0.2003 - 0.1394i   0.2003 + 0.1394i
  -0.3553        -0.2110 - 0.6447i  -0.2110 + 0.6447i
  -0.4248        -0.6930            -0.6930          

D =
  -3.0710                 0                 0         
        0           -2.4645+17.6008i        0         
        0                 0           -2.4645-17.6008i

最初の固有ベクトルは実数で、他の 2 つのベクトルは互いに複素共役になっています。3 つのベクトルはすべてユークリッド長で、norm(v,2) が 1 になるように正規化されています。

V*D/V を簡潔に表現できる行列 V*D*inv(V) は、A の丸め誤差の範囲内に入ります。そして inv(V)*A*V または V\A*V D の丸め誤差の範囲内に入ります。

複数の固有値

固有ベクトル分解できない行列もあります。これらの行列は対角化できません。以下に例を示します。

A = [ 1    -2    1 
      0     1    4 
      0     0    3 ]

この行列に対して、

[V,D] = eig(A)

は、以下の結果を出力します。

V =

    1.0000    1.0000   -0.5571
         0    0.0000    0.7428
         0         0    0.3714


D =

     1     0     0
     0     1     0
     0     0     3

λ = 1 の場合、2 つの固有値が存在します。V の 1 番目と 2 番目の列は同じです。この行列に対して、完全に線形に独立した固有ベクトルの組は存在しません。

Schur 分解

高度な行列計算の多くは固有値分解を必要としません。代わりに Schur 分解を使います。

A = USU′

ここで U は直交行列で、S は 1 行 1 列および 2 行 2 列のブロックを対角要素にもつ上三角行列のブロックです。固有値は対角要素と S のブロックで表されます。一方、U の列は固有ベクトルよりも数値特性の良い直交基底を与えます。

たとえば、このフル ランクではない行列の固有値と Schur 分解を比較します。

A = [ 6    12    19 
     -9   -20   -33 
      4     9    15 ];

[V,D] = eig(A)
V =

  -0.4741 + 0.0000i  -0.4082 - 0.0000i  -0.4082 + 0.0000i
   0.8127 + 0.0000i   0.8165 + 0.0000i   0.8165 + 0.0000i
  -0.3386 + 0.0000i  -0.4082 + 0.0000i  -0.4082 - 0.0000i


D =

  -1.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   1.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 - 0.0000i
[U,S] = schur(A)
U =

   -0.4741    0.6648    0.5774
    0.8127    0.0782    0.5774
   -0.3386   -0.7430    0.5774


S =

   -1.0000   20.7846  -44.6948
         0    1.0000   -0.6096
         0    0.0000    1.0000

完全に線形に独立した固有ベクトルの組は存在しない (V の 2 列目と 3 列目が同じ) ため、行列 A はフル ランクではありません。V の一部の列が線形に独立していないので、それは約 ~1e8 の大きな条件数をもちます。ただし、schur は、U の 3 つの異なる基底ベクトルを計算できます。U は直交であるため、cond(U) = 1 となります。

行列 S は、対角の最初のエントリとして実固有値、および 2 行 2 列のブロックの右下隅で表される反復固有値をもちます。2 行 2 列のブロックの固有値は、A の固有値でもあります。

eig(S(2:3,2:3))
ans =

   1.0000 + 0.0000i
   1.0000 - 0.0000i

参考

|

関連するトピック