• ベストアンサー

ヤコビ法とQR法について

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

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

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.1

n×n行列Aの固有値問題。 困り度3ということですから、中途半端ながらres付けてしまいます。 ヤコビ法は大きいnには手間が大きくて辛いでしょうね。 QR法が便利だけれど、一手間掛けまして、原点を移動する。つまり狙いの固有値を絶対値≒0になるように座標変換しておいてからQR法を使うのが旨いやり方だと思います。つまり予想される値μを使って、Aの代わりにA-μI の固有値を求めて、得られた答えにμを加えればよい。 反復計算で固有値と固有ベクトルを求める段階では、固有値の絶対値同士がどのぐらい散らばっているかによって計算の手間が全然違う。絶対値の順に固有値を並べた時、隣り合う固有値の比が1に近いと手間が掛かります。固有値が一個ずつ出てくるのを使って問題を減次するのも、nが大きいときには結構な手間です。なかなか一概には論じきれないな。 また固有値と固有ベクトルの近似値μ,vを改良するという仕上げは欠かせません。つまり (A-μI)x = v を解いてxを求め、改良された固有ベクトルの近似値xと、固有値の近似値(Ax)[j]/x[j]を求める。これを繰り返します。(これは最初の近似が良ければ凄く速く収束します)。QR法はこの計算にも向いてます。 スパースな行列(つまり零要素が殆ど、という場合)だと、また話が違うようです。 いずれにせよ、誤差の累積が怖いので、計算の精度(有効桁数)を変えて2度計算し、両者の結果が一致することを確認すべきです。もし食い違うようなら、有効桁数が足りない訳です。

asamaken
質問者

お礼

とても有用なご回答ありがとうございます。 もう少しいろいろ調べながらやっていこうと思います。 ありがとうございました。

その他の回答 (1)

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.2

大きい固有値だけに限って求められれば十分、という応用が沢山あります。また、制御工学では不安定な固有値成分だけ取り出したい。そういう場合どうするのか、ちょっと調べてみたら 「ランチョス法に、等角写像を組み合わせる。」 というテクニックがあるみたいです。 等角写像 y = (x+c) / (x-c) (x,yは複素数、cは適当な正の定数) によって、不安定なやつを単位円の外に、安定な奴を単位円の中に写像しておいて、ランチョス法(絶対値が大きい固有値から順に出てきます)を適用するらしい。  まだ調査中ですが、お急ぎのようなのでとりあえず。

関連するQ&A

  • ヤコビ法

    固有値などをもとめるときに使うヤコビ法の理論が載っているサイトがあれば教えてください。 プログラムがのっているサイトはたくさん見つけてあります。

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

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

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

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

  • QR法について

    QR法により,固有値を求めるプログラムを作っています. QR法でqjを求めるときに,rjjの逆数が必要ですが,rjj=0になったとき,うまく求めることができません. このような場合に,どうしたら解決できますか? ちなみに言語はC言語ですが,解決法さえいただければ自力で組むつもりです.「教育」の「数学」のカテゴリか迷いましたが・・・・

  • scilab ヤコビ法について、errorがでます

    ヤコビ法で固有値、固有ベクトルを求めるプログラムを色々調べながら作っていたのですが、errorが出てしまい手詰まりになりました。あまり、scilab自体詳しくなく、多々間違いがあるかもしれませんが、学校でどうしても必要なため、どうか、解答の方をよろしくお願いします。 //初期化 A=[2 1 3;1 0 1;3 1 0] Pinf=eye(3,3) //ヤコビ法:Aの対角成分が固有値、 Pinfの行ベクトルが固有ベクトルになる for i=1:21, i if abs(A(1,2))>abs(A(1,3)) then theta=atan(2*A(1,2))/(A(1,2)-A(1,3))/2 P=[cos(theta),sin(theta);-sin(theta),cos(theta)]; elseif abs(A(1,3))>abs(A(2,3)) then theta=atan(2*A(1,3))/(A(1,3)-A(2,3))/2 P=[cos(theta),sin(theta);-sin(theta),cos(theta)]; else theta=atan(2*A(2,3)/(A(2,3)-A(1,2)))/2 P=[cos(theta),sin(theta);-sin(theta),cos(theta)]; end Pinf=P*Pinf A=P*A*P' ,end 現在、下から4行目のendを入れなければ、end または 「else が抜けています...」とerrorが出てしまい、また、endを入れると、その下の Pinf=P*Pinf の所で、「一貫性がない掛け算です。」とerrorがでます。 以上が、現在困っている状況になります。 よろしくおねがいします。

  • 大学数学でのヤコビ行列について

    大学数学でのヤコビ行列について 現在ヤコビ行列を求める以下の問題をやっています. 問題 次の写像のヤコビ行列を求めなさい. f:R^2->R^3 ※2次元から3次元への写像 f×(x,y) = xe^y + cosy    x  x + e^y ※(x,y):列ベクトル 自分なりに解いてみたところ,右辺の各成分をxとyで偏微分して, f = e^y   ,xe^y-sin y  1   ,  0  1   , e^y と求めました. このやり方と答えで合っているのでしょうか? 参考にしたURLを載せておきます. http://www.ne.jp/asahi/search-center/internationalrelation/mathWeb/Differentiation/PartialDifferential2VarFnctn/GradHessian.htm どなたかご教授お願いします.

  • ニュートン法に関して

    数値計算初心者です。数値計算で分からないことがあるので質問します。よろしくお願いします。 y=f(x,a)という関数があってパラメータaを非線形最小2乗法のニュートン法やマルカート法を使って求めたいのですが、計算過程でf(x)を各パラメータで偏微分してヤコビ行列を求める必要があると思われます。 例えばf(x)が複雑な関数で偏微分するのに困難な関数であった場合、 偏微分をしなくてΔxを決定するにはどのような方法があるのでしょうか?

  • マルチシフトQR法

    固有値を求めるマルチシフトQR法について詳しい方いらっしゃいますか? このプログラムを作ってますが、ハウスホルダー変換で0に限りなく近い値で割るという処理に出くわし、それが原因で収束しません。もし何か情報があったら教えてください

  • 計算誤差について

    行列の固有値計算についての研究をしていますが,教えてください. 発生して許される誤差(相対誤差)はどのぐらいですか?固有値計算が使われる分野によって違うと思いますが,「こういう分野ではこの程度」とか書いてあるものあがあると一番うれしいのですが・・・何か情報あれば教えてください. ちなみに計算は倍精度で行っています.よろしくお願いします

  • 一般化逆行列と最小二乗法

    最小二乗法は割と簡単に理解することができますし、式の誘導も簡単ですが、分数が出てきたら分母がゼロでないとか、逆行列が存在するとか理想的な条件を仮定しているように思います。そこでその理想的な条件が存在しない場合、すなわち逆行列が存在しない場合、”一般化逆行列を用いて計算する”とサラリと書いてある本がありました。データ解析ソフトRなどもそれに対応しているかもしれません。一般化逆行列というのはすんなり受け入れられるものでしょうか。何か別の指標があってそれを最小化するとか何らかのペナルティとか損失を甘受した上で計算していると思うのですが、いきなりピンチヒッターとして出てくることができるみたいに書いてありました。数理統計の本には共線性がある場合とか行列式が極めて小さな値になるとかの場合に出てくるようです。少し読んでみると固有値・固有ベクトル(正規直交行列を構成)で行列を展開したもののような記述もあり、これはこれで普通のことのように思うのですが。一般化逆行列とはどのようなものだと思えばいいでしょうか。