正方行列を入力し、応用タブを開いて、固有値なら eig(A)、固有ベクトルなら eigvec(A) を使ってください。分解タブでは、正確な演算による特性多項式も 得られます。この三つは同じ問いを別の角度から見たもので、このページの残りではそれを順に説明します。
固有ベクトルとは何か
行列が働きかけると、ほとんどのベクトルは向きを変えます。固有ベクトルは、それを免れる数少ない方向の 一つです。行列はそれを伸ばすか縮めるだけなのです。その倍率が固有値です。形式的には、0 でないベクトル v について A·v = λ·v が成り立ちます。
行列が空間に対して行うことはすべて、こうした特別な方向に沿った伸縮の混ざり合いです。だからこそ、線形 変換を単に適用するだけでなく理解する必要がある場面には必ず現れます。主成分分析、振動モード、微分方程式 の安定性、PageRank ベクトルなどです。
特性多項式
定義式 A·v = λ·v は (A − λI)·v = 0 と書き換えられます。0 でない v がこれを 満たせるのは A − λI が特異なときだけで——そうでなければ唯一の解は v = 0 です——行列が 特異になるのは、その行列式が 0 になるとき、かつその ときに限ります。つまり固有値とは det(A − λI) = 0 を満たす λ のことであり、この式こそが 特性多項式です。
n×n の行列では次数は n になり、係数のうち二つは何も展開せずに行列から直接読み取れます。最高次の すぐ下の係数はトレースの符号を変えたもので、定数項は行列式に (−1)ⁿ を掛けたものです。どちらも手計算の 検算として優秀です。
例題
| 2 | 1 |
| 1 | 2 |
| 2 − λ | 1 |
| 1 | 2 − λ |
根である 1 と 3 が固有値です。検算に注目してください。トレースは 4 で、λ の係数は −4。行列式は 3 で、 定数項も 3 です。λ = 3 に対する固有ベクトルは (1, 1) で、行列はこの対角方向にあるものをすべて 3 倍 します。λ = 1 に対しては (1, −1) で、行列はこれをそのまま残します。二つが直交しているのは偶然では ありません。この行列は対称であり、対称行列の固有ベクトルは常に直交し、固有値は常に実数です。
固有ベクトルは決して一意ではない
v が条件を満たすなら 2v も満たし、−v も、0 でない任意の定数倍も満たします。方程式が定めているのは 方向だけだからです。そのため計算機は代表を一つ返しており、通常は長さ 1 に正規化されています。あなたの 答えが教科書のものと定数倍だけ違っていても、どちらも同じく正しいのです。比べるべきは方向であって成分 ではありません。零ベクトルは定義から除かれています。どんな λ に対しても方程式を満たしてしまい、何も 語らないからです。
固有ベクトルが足りないとき
n×n の行列は重複度を込めてちょうど n 個の固有値を持ちますが、固有値が重なっていても、同じ数だけ線形 独立な固有ベクトルがあるとは限りません。足りない行列は退化行列と呼ばれ、対角化でき ません。対角化するための固有ベクトルの基底が存在しないからです。代数的重複度を固有ベクトルの個数と 読んでしまうのは、ここで最も起こりやすい誤りの一つです。
実行列が複素固有値を持つこともあります。平面の回転には実の固有ベクトルがまったくありません——回転を くぐり抜けられる実の方向がないからです——そして固有値は共役な複素数の対になります。
この計算機の求め方
固有値は数値的に求めています。対称行列にはヤコビ回転を、それ以外には Wilkinson シフトとデフレーション を伴う QR 法を使います。特性多項式は別の道をたどり、Faddeev–LeVerrier の漸化式によって、累乗の トレースから係数を組み立てます。記号的な行列式を展開せず、最後まで正確な演算にとどまります。
固有値のアルゴリズムは代数的ではなく反復的であるため、固有値はこのサイトで唯一、計算過程を示せない演算です。途中の反復値は丸めによって生じる ものであって、手で追える推論ではありません。また実の固有値にしか収束しないので、スペクトルが複素の 行列については、答えをでっち上げるのではなく収束しなかったと報告します。逆向きの道——多項式から固有値 を求めること——は 3×3 までの手計算なら問題ありませんが、数値的には悪い考えです。多項式の根は係数の 誤差に極端に敏感だからです。
よくある誤り
- 長方形の行列に固有値を期待する。固有値は正方行列にのみ定義されます。長方形での対応物は特異値です。
- 固有ベクトルを一意なものとして扱う。固有ベクトルの 0 でない定数倍もまた固有ベクトルであり、定まっているのは方向だけです。
- 常に実数だと思い込む。実行列が複素固有値を持つことは十分にあり得ます。
- すべての成分から λ を引く。λI は対角が λ で残りは 0 なので、変わるのは対角だけです。
- 重複度を固有ベクトルの個数と読む。二重根が線形独立な固有ベクトルを二つもたらすとは限らず、もたらさないとき、その行列は退化しています。
- 符号の約束を見失う。det(A − λI) と det(λI − A) は (−1)ⁿ だけ違います。どちらも使われるので、一つを選んで貫いてください。