ハウスホルダー変換経由、ダブルQR法
『8×8行列の固有値、固有ベクトルを求めよ、しかも固有値は複素数じゃ!!』とのことでしたので、C++でハウスホルダー(householder)変換、ダブルQR法を実装をしました。
大変でしたが、なんとかできたので、ソースとそのCppDocを公開します。
コメント
fenrirです。Numerical Receiptをみるといいかもしれません。確かFortran77/90のコードがのっていると思います。コードが使いやすいかどうかはわかりませんが。
http://www.library.cornell.edu/nr/
こんなに古い記事にコメントしてすいません。プログラムについて教えてください。
ダブルシフト法のプログラムをCで作ってますが、ハウスホルダー変換のとき、
「omega * omega.transpose() * -2 / (omega.transpose() * omega)(0, 0)」の部分で、分母が限りなく0に近い場合、誤差の関係でエラーが出ます。これに対して何かしらの処理を行っていますか?
もしよろしければ教えてください。
Posted by: K : December 11, 2007 12:09 PM>Kさん
fenrirです。
コメントありがとうございます。申し訳ないですが、そのような事態は想定していませんでした、現時点では何も処理を行っていません。
少し考えてみましたが、分母が小さくなる場合とはomegaの要素全体が小さい場合しかない(なぜなら分母はノルム)ので、omega * omega.transpose()自体もゼロと扱ってしまってよいのではないでしょうか。
コメントする
- 匿名でのコメントは受け付けておりません。
- お名前(ハンドル名可)とメールアドレスは必ず入力してください。
- メールアドレスを表示されたくないときはURLも必ず記入してください。
- コメント欄でHTMLタグは使用できません。
- コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
- コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。
- 投稿ボタンを押してエラーがでなければ、投稿は成功しています。反映されるまでには少し時間がかかります。
こんにちは。
私は学生で,ある行列の複素固有値を求めたいと思っているものです。
FORTRANで3重対角行列を作るところまではいったのですが,その次のダブルQR法のプログラムが分かりません.
Posted by: tomo : October 18, 2004 04:38 PMFORTRANでのダブルQR法のプログラムはありませんか?よろしくお願いします.