• 締切済み

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

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

みんなの回答

回答No.1

「逆反復法」を使えば固有値(あるいはその近似値)から 固有ベクトルが求まります。 詳細は検索してみてください。

関連するQ&A

  • 固有値問題

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

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

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

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

    固有値問題を解くプログラムを作りたいと考えています。 対象とする行列は「実対称行列(正方行列)」で、251次の 行列を考えており、この行列の固有値、固有ベクトルを 求めたいです。そこで、現在調べたところ、ヤコビ法、 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 どこを勘違いしているんでしょうか? アドバイスをお願いします。  

  • 行列の固有ベクトルの問題

    3X3行列T (0 1 0)        (0 0 1)       (-2 1 2) がある。 行列Tの固有ベクトルを求めよ。ただし、各固有ベクトルは、第1成分を1とするものを求めよ。 次に 3X1 行列(3)       (2)       (6) を求めたTの固有ベクトルの線形和の形で表せ。 という問題です。 私は固有ベクトルが (1)   (1)   (1) (1)   (-1)  (0.5) (1)   (1)   (1) と求まりましたが、これは       (3)       (2)       (6) を表せないのではないかと思いますが。 どこか計算ミスをしたのですか? ご指導を待っております!お願いします!

  • 行列の問題(固有値)についてです

    こんにちは。行列の問題で分からないものがあります。 B= |000abb| |000bab| |000bba| |abb000| |bab000| |bba000| の固有値と固有ベクトルを求めよという問題です。(みえにくいですが、6×6行列です) 以下、自分が現時点で分かっていることを書きたいと思います。 この問題の導入としてまず A= |abb| |bab| |bba| の固有値と固有ベクトルを求めよ という問題がありました。こちらは定義にしたがい解くと 固有値a+2b 固有ベクトル(1,1,1)^t 固有値a-b(重解)、固有ベクトル(-1,0,1)^t,(0,-1,1)^tと出ました。 問題となる行列Bについて固有方程式としてT=λE-Bを考え、さらに U= |100| |010| |001| と置けば λE-B= |λU -A| |-A λU| という形になり、ここで |BA| |AB|=|B-A||A-B| となることを利用すれば |T|=|λE+A||λE-A|と整理されるので、|λEーA|と|λE+A|が0になる場合をそれぞれ考えれば、結局|T|=0の場合を考えていることになるので、前の問題と比較して 固有値±(a+2b),±(a-b)となりました。(これがあっているのかも自信ないです。) 固有値に関しては上手くできたつもりなのですが、固有ベクトルに関してはどのようにやればいいのかが分かりません。それぞれの固有値について6×6行列に入れて行列を計算していく方法しかないのでしょうか。 Bの行列に規則性があるので気がつけば簡単に求めらるのかもしれないのでしょうが、私は思いつきません。 最後まで読んでいただきありがとうございました。回答よろしくお願いいたします。

  • 固有値、固有ベクトルの求め方

    256×256の行列の固有値、固有ベクトルを求めたいのですが、良い方法がみつかりません。これは使える!というプログラムがあったら教えて下さい。

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

    以下のようなデータを用いて、共分散行列を生成するとします。 (各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行列(列は対応する固有値の数、行はベクトルの成分の数)となり、 必ずしも正方行列にはなりませんよね?そのあたりを教えて頂きたいと思います。 よろしくお願いします。

  • 3×3行列の固有値と固有ベクトル

    以下の行列Aの固有ベクトルを求めようとしているのですが,解を見つけられないでいます. 2 1 0 1 2 0 0 0 -2 計算を進めた結果,固有値λは3,1,-2となり,λ=3,1に対応する固有ベクトルはそれぞれ[1,1,0]t,[1,-1,0]tとなったのですが,λ=-2の場合で求めた固有ベクトル[1,1,k]t(kは任意の実数)がAx=λxに対応しない値になってしまいます.私の計算に何か問題があるのでしょうか? また,行列Aは対称行列なのでそれぞれの固有ベクトルの内積は0になると思うのですが,固有ベクトルの値が得られないことと何か関係があるのでしょうか? 回答よろしくお願いします.

  • ヤコビ法とQR法について

    現在固有値問題を解いているのですが、ヤコビ法とQR法とでは どちらがどれくらい計算が速いでしょうか? 解こうとしている行列は最小で1000×1000で、精度を良くする ために5000×5000程度の行列で解こうと思っています。 どなたか教えていただければ幸いです。お願いします。