Processing math: 100%

Excelユーザー関数:実固有値・固有ベクトル算出

Excel
スポンサーリンク

Excelで対象行列に対する固有値と固有ベクトルを算出するユーザー関数です。

Excelで主成分分析、慣性テンソルから主慣性モーメントなどを算出する際に使用できます。

VBAコード

説明

ヤコビ法を使って、対称行列に対し回転行列で相似変換をします。

\begin{bmatrix}cos\theta&sin\theta\\-sin\theta&cos\theta\end{bmatrix} \begin{bmatrix}a_{11}&a_{12}\\a_{12}&a_{22}\end{bmatrix} \begin{bmatrix}cos\theta&-sin\theta\\sin\theta&cos\theta\end{bmatrix} = \begin{bmatrix}a_1&0\\0&a_2\end{bmatrix}

左辺を展開すると

\begin{bmatrix}a_{11}cos^2\theta +2a_{12}sin\theta\cos\theta +a_{22}sin^2\theta& a_{12}(cos^2\theta-sin^2\theta)+(a_{22}-a_{11}sin\theta\cos\theta\\ a_{12}(cos^2\theta-sin^2\theta)+(a_{22}-a_{11}sin\theta\cos\theta& a_{11}sin^2\theta +2a_{12}sin\theta\cos\theta +a_{22}cos^2\theta\end{bmatrix}

となります。

この非対角項を消去にするには

a_{12}(cos^2\theta-sin^2\theta)+(a_{22}-a_{11})sin\theta\cos\theta=0

を解くことになり、両辺をcos2θで割って整理すると

tan\theta=\frac{-a_{11}-a_{12}\pm\sqrt{(a_{11}-a_{22})^2+4a_{12}^2}}{2a_{12}}

となり、±を+で採用すると固有値は大きい順に並びます。

tanθが求まったことから、cosθとsinθが求まります。

cos\theta=\sqrt{\frac{1}{1+tan^2\theta}}\\ sin\theta=cos\theta\tan\theta

これで変換行列(回転行列)を求めることが出来ます。

この操作を非対角項全てに対して順番に繰り返し求めることで、最終的には固有値が求まります。また、逐次変換行列同士を掛けて行くことで固有ベクトルが求まります。

使い方

例えば、下記のような対称行列の固有値を計算してみます。

\begin{bmatrix}4&1&2\\1&3&0\\2&0&5\end{bmatrix}

3行4列の範囲を指定し、

=eig(行列範囲)

と入力し、CTRL+SHIFT+ENTERを押します。

CTRL+SHIFT+ENTERはExcelで配列数式を扱う際の操作になります。

一番左の1列は、固有値

その右側の1列ずつ固有ベクトルとなります。

この例の行列の場合

固有値は

1.854897309,3.476023603,6.669079088

固有ベクトルは

\begin{bmatrix} 0.679313061948559&0.374361954852286&0.63117896877609\\ -0.593233311996296&0.786435698692206&0.172026536791294\\ -0.431981482709593&-0.491296263553547&0.756320024866686 \end{bmatrix}

となります。

参考資料

CQ出版社、VisualBasicによる固有値計算&振動解析プログラム、黒田英夫著

なお、現在は絶版となっていて、古本はプレミアの値段がついてしまっています。

コメント

タイトルとURLをコピーしました