ハウスホルダー変換経由、ダブルQR法

『8×8行列の固有値、固有ベクトルを求めよ、しかも固有値は複素数じゃ!!』とのことでしたので、C++でハウスホルダー(householder)変換、ダブルQR法を実装をしました。

大変でしたが、なんとかできたので、ソースとそのCppDocを公開します。

Matrix.hとそのCppDoc
Complex.hとそのCppDoc

※メンテを行っているより新しいバージョンはこちらのmatrix.hcomplex.hです。

April 27, 2004 21:24 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

こんにちは。
私は学生で,ある行列の複素固有値を求めたいと思っているものです。

FORTRANで3重対角行列を作るところまではいったのですが,その次のダブルQR法のプログラムが分かりません.
FORTRANでのダブルQR法のプログラムはありませんか?よろしくお願いします.

Posted by: tomo : October 18, 2004 04:38 PM

fenrirです。Numerical Receiptをみるといいかもしれません。確かFortran77/90のコードがのっていると思います。コードが使いやすいかどうかはわかりませんが。
http://www.library.cornell.edu/nr/

Posted by: fenrir : October 18, 2004 09:11 PM

こんなに古い記事にコメントしてすいません。プログラムについて教えてください。

ダブルシフト法のプログラムをCで作ってますが、ハウスホルダー変換のとき、
「omega * omega.transpose() * -2 / (omega.transpose() * omega)(0, 0)」の部分で、分母が限りなく0に近い場合、誤差の関係でエラーが出ます。これに対して何かしらの処理を行っていますか?

もしよろしければ教えてください。

Posted by: : December 11, 2007 12:09 PM

>Kさん
fenrirです。
コメントありがとうございます。申し訳ないですが、そのような事態は想定していませんでした、現時点では何も処理を行っていません。
少し考えてみましたが、分母が小さくなる場合とはomegaの要素全体が小さい場合しかない(なぜなら分母はノルム)ので、omega * omega.transpose()自体もゼロと扱ってしまってよいのではないでしょうか。

Posted by: fenrir : December 13, 2007 11:21 AM

コメントする