• ベストアンサー

(非)対称行列の実固有値をすべて求めたい

1000次元程度の行列の実固有値を数値的にすべて求めたいのですが、 いい方法はあるでしょうか? 行列に特に対称性は仮定しません。 通常はQR法+ハウスホルダー変換を使うと思います。 しかし、以下のページ http://www.ma.is.saga-u.ac.jp/minamoto/book/book8/program/chap9/program94.c のコードで実行して見ましたが、虚数解を含むような場合には 計算が終了しないようです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://www.na.scitec.kobe-u.ac.jp/~yamamoto/work/multishift.PDF にいろいろ、解法が書いてあるみたいです。 ただ、質問者さんの引用されてあるプログラムは C言語による 「数値計算入門」 ~ 解法・アルゴリズム・プログラム ~ http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN4-7819-1114-5 のものようですが、これは、対称行列でない場合にも、適用出できるのでしょうか? もともとの原理は、対称行列の場合は固有値は実数で、固有ベクトルが基底になる(つまり直交行列で対角化可能) ですから、一番大きな固有値でわった行列をかけることで他の固有ベクトルは0に収束するというのが出発点のようですが。 一般の行列は、対角化できるとは限らない、複素行列を使わないといけない。とかあるので、固有値は共役複素数をつかって実数化する云々は、前述の論文には書いてありますが。

ibm_111
質問者

お礼

cpplapackを用いて計算出来ました。 ありがとうございます。

ibm_111
質問者

補足

ありがとうございます。 早速読んでみます。 >対称行列でない場合にも、適用出できるのでしょうか? 固有値が全部実数の場合には 事前にハウスホルダー変換することにより 適用できるようです。 念の為、 http://keisan.casio.jp/has10/SpecExec.cgi?path=09300000.%82%DD%82%F1%82%C8%82%CC%8E%A9%8D%EC%8E%AE%81i%90%94%8Aw%81j%2F02000000.%88%EA%94%CA%90%94%8Aw%2F10000104.3%81~3%8Ds%97%F1%82%CC%8C%C5%97L%92l%2Fdefault.xml と比較して見ましたが、特に問題ありませんでした。

関連するQ&A