このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
固有値
固有値分解
正方行列 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