Mathematics | ![]() ![]() |
固有値
正方行列Aの固有値と固有ベクトルは、スカラとベクトルvで表し、つぎの関係を満たします。
固有値分解
対角行列の対角要素に固有値を配置し、対応する固有ベクトルからなる行列をVとすると、
の関係があります。V が正則ならば、これは固有値分解になります。
前の節の常微分方程式の係数行列を考えます。
A = 0 -6 -1 6 2 -16 -5 20 -10
lambda = eig(A)
は、固有値を含んだ列ベクトルを作成します。この例題の行列に対して、固有値は複素数になります。
lambda = -3.0710 -2.4645+17.6008i -2.4645-17.6008i
各々の固有値の実数部は負で、はtが増加するときにゼロに近付きます。2つの固有値のゼロでない虚数成分、
は、微分方程式の解の中の振動成分
に関連します。
2つの出力引数を設定すると、eig
は固有値ベクトルと固有値を計算し、対角行列の対角成分に固有値を出力します。
[V,D] = eig(A) V = -0.8326 -0.1203+ 0.2123i -0.1203- 0.2123i -0.3553 0.4691+ 0.4901i 0.4691- 0.4901i -0.4248 0.6249- 0.2997i 0.6249+ 0.2997i D = -3.0710 0 0 0 -2.4645+17.6008i 0 0 0 -2.4645-17.6008i
最初の固有ベクトルは実数で、他の2つのベクトルはお互いに複素共役になっています。3つのベクトルすべては、Euclidean長で、norm(v,2)
が1になるように正規化されています。
V*D/V
のように、より簡潔に表現できる行列
V*D*inv(V)
は、A
の丸め誤差の範囲内に入ります。そして、inv(V)*A*V
、または、V\A*V
共、
D
の丸めの範囲内に入ります。
フルランクでない行列
固有ベクトル分解できない行列もあります。これらの行列は、フルランクでなく、対角化できないものです。例えば、
A = 6 12 19 -9 -20 -33 4 9 15
[V,D] = eig(A)
V = 0.4741 0.4082 -0.4082 -0.8127 -0.8165 0.8165 0.3386 0.4082 -0.4082 D = -1.0000 0 0 0 1.0000 0 0 0 1.0000
に2つの固有値が存在しています。
V
の2番目と3番目の列は、お互い符号が逆の関係にあります。すなわち、に対応する単一固有ベクトルとは正規化の方法が単に異なっただけです。この行列に対して、完全な線形的な独立な固有ベクトルの組みが存在していません。
オプションのSymbolic Math Toolboxは、強力な計算代数システムであるMapleと関連付けてMATLABの機能を拡張します。ツールボックスにより与えられる関数の一つは、Jordan Canonical 型を計算します。ここでの例題は、3行3列の行列に対して、整数要素になることがわかります。
[X,J] = jordan(A) X = -1.7500 1.5000 2.7500 3.0000 -3.0000 -3.0000 -1.2500 1.5000 1.2500 J = -1 0 0 0 1 1 0 0 1
Jordan Canonical Formは、重要な理論的な概念ですが、大きな行列や丸め誤差や他の不確かさを含む要素をもつ行列に対して、信頼性の高い計算ツールではありません。
MATLAB行列計算の中でのSchur 分解
MATLABのアドバンスな行列計算は、固有値分解を必要としません。その代わりに、Schur分解を使います。
ここで、Uは直交行列で、 Sは対角要素が1行1列または2行2列のブロックを対角要素にもつブロック上三角行列です。固有値は対角要素とvのブロックで表されます。一方、Uの列は固有ベクトルよりも数値的に良い性質をもつ基底を与えます。フルランクでないもののSchur分解の例を示します。
[U,S] = schur(A) U = 0.4741 -0.6571 0.5861 -0.8127 -0.0706 0.5783 0.3386 0.7505 0.5675 S = -1.0000 21.3737 44.4161 0 1.0081 0.6095 0 -0.0001 0.9919
重根になる固有値は、S
の下2行2列ブロックに含まれています。
![]() |
行列のベキと指数 | 特異値分解 | ![]() |