固有値
固有値分解
正方行列 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