行列演算

共分散行列の固有ベクトルは主軸に対応する。

行列の固有値を求める

数値計算的な解法

  1. 任意のベクトルx(0)を持ってくる
  2. \mathbf{x}^{(k+1)}=A\mathbf{x}^{(k)}でk→∞とする。

(方向が)収束したx\mathbf{x}^{(k+1)}=\lambda_1 \mathbf{x}^{(k)}に対して
任意のiについて\frac{x_i^{(k+1)}}{x_i^{(k)}}\rightarrow \lambda_1*1
\mathbf{x}^{(k)}\rightarrow \mathbf{e}_1(単位ベクトル化により)

レイリー商

Aが実対称行列→固有値は実数
\frac{\left(\mathbf{x}^{(k)},A\mathbf{x}^{(k)}\right}{\left(\mathbf{x}^{(k)},\mathbf{x}^{(k)}\right}\rightarrow \lambda_1
内積を計算することにより、等価な安定した計算することができる。
これをレイリー商という。

原理

A=\lambda_1\mathbf{e}_1\mathbf{e}_1^t+\lambda_2\mathbf{e}_2\mathbf{e}_2^t+\cdot+\lambda_n\mathbf{e}_n\mathbf{e}_n^t
と展開できるので、任意のベクトルを持ってくると
\mathbf{x}^{(0)}=C_1\mathbf{e}_1+C_2\mathbf{e}_2+\cdot+C_n\mathbf{e}_n
\mathbf{x}^{(1)}=A\mathbf{x}^{(0)}=\lambda_1C_1\mathbf{e}_1+\lambda_2C_2\mathbf{e}_2+\cdot+\lambda_nC_n\mathbf{e}_n

固有ベクトルの直交性を利用している
\mathbf{e}_i^t\mathbf{e}_j=\left\{\begin{matrix} 0, & (i \neq j) \\ 1, & (i=j) \end{matrix}\right

したがってk→無限大とすると、x(k)はe1の方向になる。
この方法をべき乗法という。

2番目に大きい固有値固有ベクトルを求める方法

最も大きい固有値固有ベクトルはすでに求まっているので
A'=A-\lambda_1\mathbf{e}_1\mathbf{e}_1^t
とすれば、A'に対して同様の処理を行うことで2番目に大きい固有値固有ベクトルを求めることができる。
この方法をホテリング法(Hotelling)という。

実対称行列の固有値固有ベクトルの計算法

①任意のベクトルx^(0)を初期値とする。
②以下の計算を行う。
\mathbf{x}^{(k+1)}=A\mathbf{x}^{(k)}
r_{k+1}=\frac{\left( \mathbf{x}^{(k)},A\mathbf{x}^{(k)} \right)}{\left( \mathbf{x}^{(k)},\mathbf{x}^{(k)}\right)}
これを\frac{r_{k+1}}{r_k}が収束するまで繰り返す。
③収束したベクトルを単位ベクトル化すると、それが固有ベクトル
固有値\frac{r_{k+1}}{r_k} \rightarrow \lambda_1
④ホテリング法を用いて①〜③を繰り返し全ての固有値を求める。

*1:λ1は最も絶対値の大きい固有値。λ2以降の求め方は後述