アプリ版:「スタンプのみでお礼する」機能のリリースについて

1000次元程度の行列の実固有値を数値的にすべて求めたいのですが、
いい方法はあるでしょうか?
行列に特に対称性は仮定しません。

通常はQR法+ハウスホルダー変換を使うと思います。
しかし、以下のページ
http://www.ma.is.saga-u.ac.jp/minamoto/book/book …
のコードで実行して見ましたが、虚数解を含むような場合には
計算が終了しないようです。

A 回答 (1件)

http://www.na.scitec.kobe-u.ac.jp/~yamamoto/work …

にいろいろ、解法が書いてあるみたいです。

ただ、質問者さんの引用されてあるプログラムは

C言語による
「数値計算入門」
~ 解法・アルゴリズム・プログラム ~
http://www.saiensu.co.jp/?page=book_details&ISBN …

のものようですが、これは、対称行列でない場合にも、適用出できるのでしょうか?

もともとの原理は、対称行列の場合は固有値は実数で、固有ベクトルが基底になる(つまり直交行列で対角化可能)
ですから、一番大きな固有値でわった行列をかけることで他の固有ベクトルは0に収束するというのが出発点のようですが。
一般の行列は、対角化できるとは限らない、複素行列を使わないといけない。とかあるので、固有値は共役複素数をつかって実数化する云々は、前述の論文には書いてありますが。

この回答への補足

ありがとうございます。
早速読んでみます。

>対称行列でない場合にも、適用出できるのでしょうか?

固有値が全部実数の場合には
事前にハウスホルダー変換することにより
適用できるようです。

念の為、
http://keisan.casio.jp/has10/SpecExec.cgi?path=0 …
と比較して見ましたが、特に問題ありませんでした。

補足日時:2012/08/06 10:39
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/06 12:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!