■固有値,固有ベクトルをエクセルのソルバーで求めるには

Rによる固有値・固有ベクトルの計算は別頁→
この頁の内容は,定石として教科書や演習書に書かれているものではなく筆者が考えたものなので,覚えるものでなく1つの提案です.
◇前提◇
 次の条件を満たしているとき,以下の方法によって固有値,固有ベクトルを求めることができる.
(1) 係数行列が成分が実数の正方行列であること.
(2) 固有値,固有ベクトルとも実数になるもの.
 統計でよく登場する「相関行列」「分散共分散行列」は実対称行列なので(1)の条件を満たす.したがって,「相関行列」や「分散共分散行列」の固有値,固有ベクトルのうち実数であるもの(2)は以下の方法で求めることができる.
◇作業内容の確認◇
 与えられた正方行列Aに対して
A=λ () …(1)
を満たすλが存在するとき,λを行列Aの固有値といい,λに属する(対する)固有ベクトルという.
○ 固有値と固有ベクトルを求めるときには,まず固有値を求めて,次に各々の固有値に対する固有ベクトルを求める(2段階の手順で求める).
○ (1)式を満たす固有値λは,固有方程式
det(A−λE)=0 …(2)
を未知数λについての方程式として解けば求められる.
○ 一般にn次正方行列に対する固有方程式はn次方程式になり,n次方程式の解は(重解や虚数解も含めると)n個存在する…2次の正方行列の固有値は2個,3次の正方行列の固有値は3個,…である.
※ Excelで求められるのは数学・代数的な解というよりは,整数・小数(場合によっては分数)の値

 ここで扱う例のように固有値が複数個あるときに,それらを順に求めるにはどうしたらよいのかというところがポイント
 次のイメージ図のようにで示した初期値によって見つかる解(収束する値)が異なるので,全部を能率よく見つけるにはどうすればよいかと考える.

図1
◇Excelにおける作業◇
例1
 右のような行列Aが与えられたとき,次の順に求める.
(1) はじめに固有値(4個)を求める.
(2) 次に各々の固有値に対する固有ベクトルを求める.

(1) 次の手順で固有値4個を求めることができる.
1) Excelのワークシートにおいて表1のように行列Aの各成分を入力する.(A1〜D4)
2) 未知数λのセルを決めて,適当な初期値を設定する.ここでは右のようにセルE5を未知数λの値を入れる場所とし,仮の初期値として10を記入しておく.
3) 行列Eを書き込む.(A6〜D9)
4) 2)で準備した未知数λを使って行列A−λEを作る.
A11に =A1-$E$5*A6 と書きこみ(E5のみ絶対参照[F4を押す]),これをE14までコピー・貼り付けする.
5) det(A−λE)を未知数λを使って表す.
E15にワークシート関数 =MDETERM(A11:D14) を書き込む.
(メニューを使って書き込むときは,・E15をポイントしておく.・画面上の数式メニューの左にあるfxをクリック ・関数の分類→数学/三角,関数名→MDETERM OK ・配列A11:D14 OK)
λの初期値が10のときの対応する行列式の値2520が表示される.
6) Excelのメニューからソルバーを選び実行する.
◇Excel2002の場合◇
 ツール→ソルバー→
目的セル $E$15,値 0を選択
変化させるセル E5
(オプションで右の程度の設定をしてOK)
[実行]
「解を記入する」でOK(固有値 6 が求まる)
※ 上の図1で述べたように初期値を適当に設定したとき,その初期値によって求まる解が変わるので,1つの解が求まったときに「他の解」も求めるには少し工夫を要する.
 ここでは「ソルバーの制約条件の欄に,すでに求まった解よりも小さな値を指定する」方法を考えてみる.
 具体的には,固有値として6が求まったとき,他の解を求めるために,制約条件として $E$5<=5.9 (等号なしの不等号<6は書き込めないので少し小さな値以下と書きこむ)
 固有値3が求まれば制約条件を「変更」して $E$5<=2.9 に書き換える.・・・
 このようにして固有値λ=0 , 1, 3, 6が求まる.(4次の正方行列なのでこれで全部である.)
◇Excel2007の場合◇
 データ→ソルバーと進んで以下同様に行えばよい.
A=
表1
  A B C D E
 1 0 2 -2 1  
 2 -3 5 1 -2  
 3 -2 1 0 2  
 4 1 -2 -3 5  
 5         10
 6 1 0 0 0  
 7 0 1 0 0  
 8 0 0 1 0  
 9 0 0 0 1  
 10          
 11 -10 2 -2 1  
 12 -3 -5 1 -2  
 13 -2 1 -10 2  
 14 1 -2 -3 -5  
 15         2520

※ 図1のイメージ図で示したようにβ=1の次に制約条件として $E$5<=0.9 としても,その初期値のままで α=0 がスムーズに求まるとは限らないことに注意.1の近くからは「どうしても1に行きたがる」ことがあるので,そのような場合には少し離れた初期値にして実行するとよい.

※ Excel2002では制約条件の記入後OKボタンを押すと「エラー」表示となるが,気にせず「キャンセル」を選択してから「実行」すればよい.(Excel2007ではこのエラー表示は出ない.)
(2) 次の手順で各固有値に属する固有ベクトルを求めることができる.
なお,固有ベクトルは大きさを除いて決まるので,大きさをうまく指定しないと=のような招かれざる客が入ってしまうので注意

[行列の積(A−λE)を作っておく]
○ 各々の固有値(どこかにメモしておいたものを順次 E5 に代入する.)に対する行列A−λEの係数がA11〜D14に表示されているものとする.
○ 固有ベクトルは(A−λE)=となるベクトル ()なので,その成分を書き込むセルをF11〜F14として,仮の初期値として0.5などを記入しておく.
○ 次に行列の積(A−λE)の成分をセルG11〜G14に書き込む.
 Excelのワークシート関数で行列の積を求めるものは MMULT() であるが,G11のセルをポイントしておいて =MMULT(A11:D14,F11:F14) と書き込んだとき,得られるのは行列の積のうちの1つの成分だけなので,これをG11〜G14までの列ベクトルとして書き込むには
 G11〜G14を選択・反転させておいて,画面上の方にある数式バーのどこかをポイントしておきCtrl+Shift+Enterとする.(CtrlキーとShiftキーを押しながらEnterキーを押す)(この操作は分かりにくいので注意)
[ソルバーにおける条件の指定方法を考える]
目的セルは1つしか指定できないので,G11〜G14までの「すべての値が0となる」という条件を1つの式で表現するために,G15に =SUMSQ(G11:G14) を計算しておき,「目的セルをG15」「目的値を値0」とすればよい.(x12+x22+x32+x42=0 ←→ x1=x2=x3=x4=0
=は固有ベクトルではないので,このような自明解にならないように制約条件の指定の仕方を考える]
□統計の計算においては,単位ベクトルをよく使うのでベクトルの大きさが1になるように制約条件を書き込むとよい.
⇒ ソルバーの制約条件として||=1を指定するために,F15に =SUMSQ(F11:F14) と書きこんでおき制約条件としてF15=1とする.
□数学の演習として,各成分が最も簡単な整数解が好まれるときに,右の表2のような表示では分かりにくいので,整数解(の比率)が分かりやすくするには
 1つの成分を1に固定し,残りの成分を変化させ,大きさ1という制約条件を外す.
(F11を1に固定する.F15を =SUMSQ(F12:F14) とする.変化させるセルをF12〜F14にする.F15=1の制約条件を外す.)
これにより,t(1 , 4 , -1 , -4)という解が得られる.(*)
【手順の要約】
1) F11の値を1にしておく.F12〜F14には仮の初期値として0.5などを記入しておく.
2) F12〜F14のセルの書式を「分数 3桁増加」にしておく
3) ソルバーで「変化させるセル:F12〜F14」「制約条件なし」「目的セル:G15 値0」
4) 固有値を順に代入してソルバーを実行すると固有ベクトルが得られる.
数学の演習として行うとき
 固有値のλ=0に対しては,t( 1 , 2/3 ,1 , 2/3)が得られるのでt( 3 , 2 , 3 , 2)で答える.
統計の計算として行うときは
 大きさ1のベクトルで答えるとよい.(逆向きを除けば1通りに決まる)
表2
  A B C D E F G
1 0 2 -2 1      
2 -3 5 1 -2      
3 -2 1 0 2      
4 1 -2 -3 5      
5         6    
6 1 0 0 0      
7 0 1 0 0      
8 0 0 1 0      
9 0 0 0 1      
10              
11 -6 2 -2 1   -0.172 0.000
12 -3 -1 1 -2   -0.686 0.000
13 -2 1 -6 2   0.172 0.000
14 1 -2 -3 -1   0.686 0.000
15         0 1.000 0.000


(*)4 , 2 , 3 , -5というような解となるときにx1=1と指定すると,書式設定が「標準」のときに 1 , 0.5 , 0.75 , -1.25のような小数になる.これを分数に直すには書式設定で「分数 3桁増加」を選ぶと,1 , 1/2 , 3/4 ,-1 1/4 のように分数で表示される.そこで最も大きな分母を掛けたものを解にすると整数解になる.
左の例で固有値λ=6 , 3, 1, 0に属する固有ベクトルは各々になる.

(*) 列ベクトルを表示するために,次のように行ベクトルの転置行列として表すことがある.
◇確認用 問題と答◇
問題1
 次の行列の固有値と固有ベクトルを求めよ.
6 4 2
5 7 4
-5 -5 0
(解答)
固有値 6 5 2
固有ベクトル 7 2 1
5 1 -1
-10 -3 0
問題2
 統計において登場する相関行列や分散共分散行列は実対称行列になり,固有値はすべて実数で固有ベクトルの成分もすべて実数となる.
 次の行列について固有値と固有ベクトルを求めよ.(小数第3位まで求めよ)
3 0.171 0.250
0.171 2 0.298
0.250 0.298 1
(解答)
固有値 3.072 2.029 0.899
固有ベクトル 0.970 0.224 -0.095
0.195 -0.949 -0.247
0.145 -0.221 0.964
○===Rによる固有値・固有ベクトルの計算

○===戻る