複素固有値

Last-modified: 2009-05-09 (土) 01:31:53

固有値が複素数となる場合,IMLの固有値関数eigval(),固有ベクトル関数eigvec()の値の読み方が特殊なので,簡単に説明します.
nxn行列において,n個の複素固有値は,nx2行列で返されます.1列目が実部で2列目が虚部です.
固有値は,実部,虚部で降順に行ソートされているので,複素共役となる固有値は,かならず隣同士の行に配置されています.
n個の固有ベクトルは,nxn行列で返されます.
i行目の固有値が実数の場合は,対応する固有ベクトルは,i列ベクトルになります.
ここが少しわかりにくいのですが,
i行目とi+1行目が共役な複素固有値ならば,対応する2つの共役な複素固有ベクトルの実部は,i列ベクトルで,
虚部は,i+1ベクトルです.
以下に例を示します.

proc iml;

a={
 0 0 1
,1 0 0
,0 1 0
};


v=eigval(a);
w=eigvec(a);


print a, v,w;

run;
/*
              A

        0         0         1
        1         0         0
        0         1         0

         V
   実部   虚部
        1         0    <- フロベニウス根
     -0.5 0.8660254  <- -0.5+0.866i
     -0.5 -0.866025  <- -0.5-0.866i

              W
  1番目の 2番目と3番目の共役な複素
  実固有値 固有値に対応する
  の    複素固有値の
  固有   実部      虚部
  ベクトル
 -0.57735 0.2886751       0.5
 -0.57735 0.2886751      -0.5
 -0.57735  -0.57735         0


整理すると

3つの固有値

   1   ,  -0.5+0.866i ,   -0.5-0.866i

対応する
固有ベクトル  ↓       ↓
 ↓
-0.577     0.289+0.5i      0.289-0.5i
-0.577    0.289-0.5i      0.289+0.5i
-0.577    -0.577           -0.577
 */