固有値と固有ベクトル

なんつーか、固有値複素数を許す場合の固有値の問題がすげー楽しいです。
別に行列が複素数でなくても固有値複素数になるような場合は沢山あります。今、行列Aを、
  A=\(\array{z_1 & z_2 \\ z_3 & z_4}\)
として、固有値をλとすると、固有方程式は、
  |A-\lambda I|=0 \\ \|\array{z_1-\lambda & z_2 \\ z_3 & z_4-\lambda}\|=0\\ (z_1-\lambda)(z_4-\lambda)-z_2z_3=0 \\ \lambda^2-(z_1+z_4)\lambda+z_2z_3-z_1z_4=0 \\ \lambda=\frac{1}{2}\{(z_1+z_4)\pm\sqrt{(z_1-z_4)^2-4z_2z_3}\}
になります。
ここで中学とか高校でもやるかも知れないけど、ルートの中が負になると解が解になります。ので、この解の判別式Dが負の場合は固有値複素数になります。改めてここで判別式の中が負の値をとるとして、上の解が、実数Dを用いて
  \lambda=\frac{1}{2}(z_1+z_4)\pm iD \\ \lambda_1=\frac{1}{2}(z_1+z_4)+iD \\ \lambda_2=\frac{1}{2}(z_1+z_4)-iD
と書くとする。そうすると、固有値複素数の場合は二つの固有値は互いに複素共役であることが分かるのですね。で、これから固有ベクトルを求めるのですが、そうするとまあこれから先ややこしいことになるので、Mathematica様にやっていただくことにします。

In[1]:= A={{z1,z2},{z3,z4}};
In[2]:= Eigensystem[A]

とやると、それぞれの固有値に対応する固有ベクトルが出てきます。ここで固有ベクトルを、それぞれ、固有値λ1とλ2に対して、q1q2とすると、
  \vec{q}_1=\(\array{-\frac{z_4-z_1+iD}{2z_3}\\1}\)\\ \vec{q}_2=\(\array{-\frac{z_4-z_1-iD}{2z_3}\\1}\)
になります。
なので、固有値複素数になる場合は固有ベクトル複素共役の関係にあるのですね。いや、これマジで面白いんですけど。面白過ぎですよ。っつーかまあ手で計算するのに挫折しただけなんですけどね。
そして固有値複素数になる条件は判別式Dが負になるときで、
  D=\sqrt{(z_1-z_4)^2-4z_2z_3}\lt0
な訳ですね。
っつーことで、実行列でも固有値複素数になることもあるわけです。いやー算数って何でこんな楽しいんだろう。
で、因みに何でこんなことやってるかって、CLAPACKで固有値固有ベクトルを出力させるときに上の公式を使ってるからなんですけどね。
そして、今、n次の正方行列の固有値固有ベクトルを求めたいとする。そうすると、1≦i≦2n、1≦j≦n、i=2j(但しiが偶数のとき、奇数のときはi+1=2j)という整数i、jに対して、固有ベクトルが定義されてて、それに対してCLAPACKの返り値が、
  \large \array{\vec{p}_1,&\vec{p}_2,&\vec{p}_3,&\cdots,&\vec{p}_i, &\vec{p}_{i+1},&\cdots,&\vec{p}_{2n}\\ \vec{q}_1,&\vec{q}^*_1,&\vec{q}_2,&\cdots, &\vec{q}_i,&\vec{q}_i^*,&\cdots,&\vec{q}^*_n\\ \scr{Re}[\vec{q}_1],&\scr{Im}[\vec{q}_1],&\scr{Re}[\vec{q}_2], &\cdots ,&\scr{Re}[\vec{q}_j],&\scr{Im}[\vec{q}_j],&\cdots,&\scr{Im}[\vec{q}_n]}
として一番下のように出てきます。
確かに複素共役であることが分かってれば変数を節約できるのでこういうやり方は理に適ってますね。でもnが奇数だったらどうするんだろう。まあ俺は偶数の場合しか扱わないんで今のところは大して問題ではないんですけどね。