• 締切済み

n✕n行列(非対称)の固有値問題のアルゴリズム

よろしくおねがいします。 タイトルの通り、 n✕n行列の固有値を求めるプログラムを作成しようと考えています。 ただし、行列は非対称行列とするためJacobi法等は使えません。 そこで、 このプログラムを作成する際の一般的なアルゴリズムを教えていただきたいです。 例えば、どういった法則を使うのか?などです。 具体的であればあるほどありがたいです。 しょぼい質問ですがお願いします。

みんなの回答

回答No.5

4 x 4 でしたら、固有方程式を直接といたほうが簡単です。 ヤコビとか QR とかは巨大な行列に使う手法です。 ベアストウヒッチコックとかDKAとか、いろいろとやり方があります。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

肝心なところを書き忘れました。 原理的には QR だけで固有値は求まります。小さな行列ではこれで十分ですが、 数十、数百の大きさの行列では QR だけでは収束が遅すぎるので、 他の手法(加速処置)との組み合わせが必要です。とんでもなく速くなります。

epi_suke
質問者

お礼

具体的なところまでありがとうございます。 実際求めたい行列は4✕4の非対称行列なので QR法のみで大丈夫な気がします。 QR法は初めて聞くアルゴリズムなので 勉強してから実装したいと思います! 実際のところ Cで組むとしたら大変でしょうか??

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

私が勉強した頃は、非対称行列では Reduction(ヘッセンベルク化、3重対角化) + QR + 原点移動 + 減次 が定石だったと思います。最近は違っていたらすいません。 Reduction(ヘッセンベルク化、3重対角化) はハウスホルダー法を実装したことが ありますが、他にもいろいろなやり方があるようです。 #双ランチョス法とか・・・実装経験なし。対称行列のように3重対角化できるようなので #メチャ速いかも。 Reduction で計算量を減らしたあと、QR + 原点移動 + 減次 をセットで行うと 収束が速いようです。 逆にセットでやらないととても遅くなって実用的ではありませんでした。 拙い情報ですが・・・

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

条件にもよるけど, べき乗法 (逆べき乗法) や LR法など, いくつかあるよ. というか, 調査した?

epi_suke
質問者

補足

回答ありがとうございます。 条件は非対称行列である、 すべての固有値を求めたい、 C言語を使いたいぐらいです。 調べて見たところ、 フレーム法+ベアストウ法を用いるものは見つけましたが、 なかなか非対称行列の例題がないため他はわかりませんでした。 そこで その他にもアルゴリズムがあるのかを知りたくて投稿しました。 言葉足らずですみません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

企業で統計を扱う部門の者です。 固有値は対称行列しか求めることができません。 非対称行列の固有値を求めたいということは、 ランク落ちに近い、すなわち最小固有値がきわめて0に近い 状態を知りたいのでしょうか。 もし、そうであれば、 rank(A)=rank(A'A)=rank(AA') という公式がありますので、 それを用いて対称行列にしてから固有値を求めてはどうでしょうか。

epi_suke
質問者

お礼

回答ありがとうございます。 簡単にいうと近似して求めるということですね。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    対称行列の固有ベクトルは互いに垂直という性質がありますが、 固有ベクトル AX1=λ1 X1、 AX2=λ2 X2 の式から n次の対称行列Aは次のように書き表すことができます A= λ1 X1 X1^t +λ2 X2 X2^t+ ・・・ +λn Xn Xn^t なぜ固有ベクトルの式から対称行列の式が表すことができるのでしょうか? 証明を教えてください。よろしくお願いします。

  • 行列固有値問題

    Aは、3×3行列で、3つの固有値のうち2つが同じ(1組が重解)で、もう一つが異なる解、つまり固有値λ1、λ2、λ3で λ1=λ2 λ3≠λ1 の場合、 Aが対称行列ではないもの具体例を示して下さい。また、その具体例の行列を対角化する行列Pも示して下さい。 この時、求める最小多項式は重解はないものとします。 つまり、(A-λ1E)(A-λ3E)=0 をみたし、 対角化した行列は、λ1=λ2、λ1≠λ3で [λ1 0 0] [0 λ2 0] [0 0 λ3] になります。 このようなAでなおかつ対称行列でないものをあげて欲しいのですが、存在しますか? 対称行列だったら、いくつか列があったのですが、そうでない具体例が知りたいのです。

  • 対称行列 固有値 実根

    n次実対称行列の固有方程式の解(固有値)がn個の実数となるのは、なぜでしょうか。 参考書など見てみましたが、記載されていないようで困っています。 簡単な証明や理論など、どなたかご存知の方がいらっしゃれば教えていただきたいです。

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

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

  • 歪対称行列について

    歪対称行列「J=-J^T(転置行列)∈R(n×n)」の固有値は0、または純虚数であることを示せ。 という問題です。 固有方程式を地道に解いていくことから始めるのは分かりますが、展開式の第2項以降がどうなるのか分かりません。 回答例をお願いします。

  • 固有値問題

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

  • 行列の固有値に関する問題

    次の問題の解き方かヒントお願いします。 Q1.固有値の和はAのトレースに等しい。つまり、      TrA=Σ(1<=i<=n)aii=λ1+λ2+…+λn Q2.n次の正方行列Aの特性根をλ1、λ2、…、λnとすると|A|=λ1λ2…λn Q3.Aが正則行列ならtAAは正定値対称の行列である。 Q4.Aが正定値行列、Pが正則行列ならtPAPも正定値行列である。

  • 対称行列の対角要素を増加させた場合の固有値について

    n次の対称行列Aの一つの対角要素を増加させた対称行列をA'とします. Aの固有値を大きい順にλ1,λ2,・・・λn, A'の固有値を大きい順にλ'1,λ'2,・・・λ'nとします. このとき,λ'1=>λ1,λ'2=>λ2,・・・,λ'n=>λn が成り立つことを証明したいのですが, クーランのミニマックス法(行列の二次形式を最大化し,拘束条件を動かして最小化する方法)を用いる以外の方法で,できるだけ簡単に証明できませんか? どなたか,よろしくお願い致します.

  • 対称行列への近似

    こんにちは. 自分は多次元の数値解析をしています. その際に固有値,固有ベクトルを使用するのですが,その対象となる行列が対称行列ではない為,固有値が虚数解になってしまうため,後々の計算に不具合が生じてしまいます. そこで,その対象となる行列を対称行列に近似(虚数解を出さないようにする為)しようと思うのですが,なにかよい方法はありませんか? よろしくお願いします.

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

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