/* -*- MaTX -*- * * 【名前】 * eig() - 固有値分解 * * 【形式】 * {D,X} = eig(A) * CoMatrix D,X; * Matrix A; * * {D,X} = eig(A,B) * CoMatrix D,X; * Matrix A,B; * * 【機能説明】 * {D,X} = eig(A)は,正方行列 A の固有値を対角成分とする対角行列 D * と,対応する固有ベクトルを列とする行列 X を返す。そして,A X = X D * が成り立つ。固有ベクトルは個々のノルムが 1.0 にスケーリングされる。 * 固有値は,実部の降順に並べられる。 * * {D,X} = eig(A,B)は,正方行列 A と B の一般化された固有値を対角成分 * とする対角行列 D と,対応する固有ベクトルを列とする行列 X を返す。 * そして,A X = B X D が成り立つ。固有ベクトルは個々のノルムが 1.0 * にスケーリングされる。固有値は,実部の降順に並べられる。 * * 【アルゴリズム】 * 関数 eig(A) は,Eispackのルーチンの balanc, balbak, ortran, * orthes, hqr2 を使う。balanc と blabak は引数の行列をバランス化 * する。orthes は直行相似変換で実行列をヘッセンベルグ型に変換する。 * hqr2 は QR 法で実数のヘッセンベルグ行列の固有値,固有ベクトルを * 求める。 * * 関数 eig(A,B) は,Eispackルーチンの qzhes, qzit, qzval, qzvec を * 使う。 * * 【注意】 * 繰り返し計算で固有値が求まらない場合は,次のメッセージが表示される。 * * Solution will not converge * * 【例題】 * >> {D,X} = eig([[1 2][3 4]]); * >> print D,X; * === [D] : ( 2, 2) === * [ ( 1)-Real ( 1)-Imag ] [ ( 2)-Real ( 2)-Imag ] * ( 1) 5.372281E+00 0.000000E+00 0.000000E+00 0.000000E+00 * ( 2) 0.000000E+00 0.000000E+00 -3.722813E-01 0.000000E+00 * === [X] : ( 2, 2) === * [ ( 1)-Real ( 1)-Imag ] [ ( 2)-Real ( 2)-Imag ] * ( 1) -4.222291E-01 0.000000E+00 -8.245648E-01 0.000000E+00 * ( 2) -9.230523E-01 0.000000E+00 5.657674E-01 0.000000E+00 * * 【関連項目】 * eigval(), eigvec() */