• ベストアンサー

固有値問題の解法について

固有値問題を解くプログラムを作りたいと考えています。 対象とする行列は「実対称行列(正方行列)」で、251次の 行列を考えており、この行列の固有値、固有ベクトルを 求めたいです。そこで、現在調べたところ、ヤコビ法、 QR法などがあるのですが、どの方法がより高速に求められる でしょうか。ご教示願いたいと思います。また、上記の方法 よりも高速に求められる解法などありましたら、教えて頂き たいです。宜しくお願いします。

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

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

定番ですが、実対称ならば、まず鏡映変換でヘッセンベルグ化し 3重対角化します。これでその後の計算量が超超激減します。 その後 ダブルQR と原点移動と減次で攻めるというのが 一般的でしょう。

pyon_kero
質問者

お礼

お答え頂き、どうも有難うございます。 参考にしたいと思います。

関連するQ&A

  • 行列演算: 固有ベクトルの解法

    現在、対称行列の固有値、固有ベクトルを求めるプログラムを作成し、つい最近完成しました。 しかし、とても使い物にならないプログラムになってしまいました。 理由はとても遅いのです。 解法の手順として、まず固有値を求めてから固有ベクトルを求めるようと考え、入力の対称行列をHouseHolder法により三重対角行列に変換し、それをQR法により対角化してまず固有値を求めました。 固有値を求めることができたので、次に固有ベクトルを求めます。手順として、固有値ごとに入力対称行列の対角成分から固有値を減算した行列をLU分解し、連立一次方程式を解くように固有ベクトルを求めていきます。 この一連の手順で、対称行列の固有値、固有ベクトルを求めることができたのですが、とても時間がかかってしまいます。 ただし、対称行列の固有値を求めるまでの時間はとても高速です。 500×500の行列の固有値、固有ベクトルを求めるのに30分はかかってしまいますが、その中で固有値を求める時間は2秒しかかかりません。 つまり今固有値がわかっている状態で、固有ベクトルを高速に求めたいと考えています。 なにか高速に固有ベクトルを求める方法(アルゴリズム)はあるでしょうか?

  • 固有値問題

    現在、因子分析や主成分分析などを行うために対称行列の固有値及び固有ベクトルを求めるプログラムを作っています。 現在、ハウスホルダー法を用いて行列を3重対角化し、QR法にて固有値が求まるところまでは、できたのですが、この後の固有ベクトルを求める方法がわかりません。 文献などを調べておりますと、逆反復法を用いて固有ベクトルを求めれば良いとあるのですが、この逆反復法のアルゴリズムが良く分かりません。 また、この逆反復法以外で効率的に求める手法がありましたら、教えてください。 よろしくお願いします。

  • QR法を使った行列の固有値問題について

    行列の固有値と固有ベクトルを求めるプログラムをJavaで 作っています。そこで、アルゴリズムとしてQR法を用いて いるのですが、この方法では固有値のみを求めており、 固有ベクトルは求めていないことがわかりました。そこで、 QR法を用いつつ、固有ベクトルも同時に求める方法がありましたら、 教えて頂きたいと思います。宜しくお願いします。

  • 固有値,固有ベクトルのいつくかの解法が紹介されている教科書

     私は,これまで固有値,固有ベクトルが当然一意的に求められる ものだと思って,断りもなく使用していましたが, それはヤコビ法で求めたものであること.また, そのほかにもいつくかの解法があることを最近知りました.  代表的なものは勉強しておきたいと思い参考書を探しましたが, マイナーな話題なのかあまり扱われておりません.  そこで質問ですが, ・固有値,固有ベクトルの解法をいくつか紹介している ・和書 ・絶版でないもの を紹介して頂けないでしょうか?  よろしくお願いします.

  • 行列の固有ベクトルの解法

    現在行列の固有値と固有ベクトルをもとめるプログラムを作成しています。 手順としては、入力行列をハウスホルダー法により三重対角行列に変換し、その後QR法で対角化を行い固有値を求めます。 固有ベクトルはLU分解を使用して固有値ごとに求めていこうと考えました。 現状固有値を求めるプログラムは作成できました(そして正しく求められていることも確認しました)。そして行列のLU分解を行うプログラムまで作成できたのですが、LU分解後の行列から固有ベクトルを求める方法がわかりません。 詳しく説明します Ax = λx を (A - Iλ)x = 0 として、この(A - Iλ)をLU分解しました。 すると式は LUx = 0 となり 最終的に Ux = 0 をとく問題になります。 ここで行列Uは上三角行列なので、1次の連立方程式を解くように、行列Uの右下の要素を使って計算を始めていくのですが、自分がなにか勘違いをしているのだと思うのですがこの方法で計算すると固有ベクトルが全て0になってしまいます。  行列U     x       0 | 2 3 4 5 | |x1|   =  |0| | 0 4 2 9 | |x2|   =  |0| | 0 0 7 5 | |x3|   =  |0| | 0 0 0 8 | |x4|   =  |0| このような図式になり、固有ベクトルであるxを求めていくのですが、x4から順にもとめても0にしかならないんです。 下記のサイトを参考に学んでいたんですが、この部分が分からずにいます。 http://hooktail.org/computer/index.php?KL%C5%B8%B3%AB2 どこを勘違いしているんでしょうか? アドバイスをお願いします。  

  • 固有値・固有ベクトル

    固有値・固有ベクトル 行列Aにおいて、ベクトルが1つ与えられ、それがAの固有ベクトルか否かを判定する方法が分かりません。 また、そのベクトルに対応する固有値を求める方法が分かりません。 逆に、数値が1つ与えられ、それがAの固有値か否かを判定する方法が分かりません。 行列Aが4×4以上になると、固有値・固有ベクトルを求めることが困難になります。 なので、「全ての固有値・固有ベクトルを形式に沿って求める解法」以外でお願いします。

  • 共分散行列の固有値・固有ベクトルの行列

    以下のようなデータを用いて、共分散行列を生成するとします。 (各No.にはそれぞれx1~x5の5つのデータ) x1 x2 x3 x4 x5 No.1 [2 4 5 2 1] No.2 [3 10 8 7 9] No.3 [11 3 2 1 6] すると、共分散行列は3×3の正方行列になり、その固有値も3つ求まりますよね。 しかし、固有ベクトルに関してはデータがx1,x2,..,x5と5次元で考えているので、 ひとつの固有値に対して5つの成分を持つ固有ベクトルが求まりますよね。 よって、共分散行列の固有値行列は必ず正方行列になりますが、固有ベクトルの 行列は上の例の場合なら5×3行列(列は対応する固有値の数、行はベクトルの成分の数)となり、 必ずしも正方行列にはなりませんよね?そのあたりを教えて頂きたいと思います。 よろしくお願いします。

  • 行列の固有値、及び直交化問題

    (1)対称行列の固有値は、なぜ実数なのですか? (2)対称行列を対角化する行列は、直交するベクトルで構成された行列に限られるのでしょうか?だとしたら、それはなぜですか?

  • 3x3行列の固有値と固有ベクトルの問題。

    線形代数で 3x3行列の固有値と固有ベクトルの解法を教えてください。 (3 3 2) (3 2 3) (2 3 3)

  • 【対称行列の固有ベクトル】

    【対称行列の固有ベクトル】 対称な行列の固有ベクトルは,完全に直交しますか?