• ベストアンサー

逆行列(LU分解)を求める数値的なテクニック

 ある行列の逆行列をLU分解で求めるプログラムを使用しています。その行列の成分の大きさの最大値と最小値の差が10の30乗ほどあります。コンピュータで計算する場合、極端に大きな数字や小さな数字のまま計算すると正しく計算できないことがあります。AA-1=Eなので、行列の各成分をX倍すれば、求めたい逆行列A-1のX倍の逆行列が求まります。これをX分の1にすれば、求めたい逆行列を求めることができます。  すなわち、各成分の値がコンピュータで処理するのに適していない場合、ある種の補正によって、計算が可能となり、出てきた逆行列はその補正とは反対の操作をすることで求めたい逆行列を求めることができます。  そこで質問です。  コンピュータで逆行列を計算するのに適した行列の成分の値の大きさはいくつ程度でしょうか。  またその適した値にするテクニックとしてはどのようなものがあるでしょうか。

  • puh
  • お礼率18% (34/183)

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

  • ベストアンサー
  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.1

 桁落ちの誤差のためにとんでもない逆行列が計算されてしまうことがあり、これを避けるのは難しい問題ですよね。特に特定の行や列に極めて似通ったものがあるときには極端な差が要素になくてもこのような現象が起きます。ですから、予めそのような組み合わせの行や列が存在しないかどうかを検定するルーチンを用意するというのはどうでしょうか。そのルーチンにひっかかったときには行列の位が殆ど一つ下がるのに等しいわけで、求めた逆行列は殆ど意味がないというウォーニングを出すことにするのです。  また、対角要素でそれぞれの行を割ったもの(対角要素がすべて1になります)の逆行列を求めた後、その対角要素だけが入り、あとの要素はゼロになる行列をかけてやるという方法を採ると桁落ち誤差が減ると言われています。

その他の回答 (1)

回答No.2

背景が分からないので、なんともいえないのですが、連立方程式(Ax=b)を解くのであれば, Aの逆行列求めてからA-1bを求めるより、LU分解法による連立方程式の解法について数値計算の参考書を見てください。 Aが正値対象行列であれば反復解法である CG法 も使えます。 最小値と最大値の差が大きいのであれば、連立方程式の行または列をスケーリングすればいいと思います。 そもそも条件数が大きいと、数値計算の誤差の影響が大きいと思うのでその点に注意する必要がありますね。 期待されていた回答からずれていたらすみません。

関連するQ&A

  • LU分解

    LU分解するプログラムで求められる行列はなぜはじめの掛け算を行う前の行列に対して小さな誤差が生じるのでしょうか?(ちなみに値は整数です) LU分解自体誤差が出るものなのでしょうか? おしえてください

    • ベストアンサー
    • Java
  • 行列のLU分解について教えてください

    この行列AのLU分解を求めたいのですがたくさん資料などを見ていてもわかりません。 求め方をぜひ教えていただきたいです。  Aの第1行: 2,4,0  Aの第2行: 2,6,4  Aの第3行: 3,9,8 わかる方計算過程を教えてください。

  • LU分解法(ドゥーリトル法)の問題

    7x+7y+6z=13 7x+6y+5z=10 6x+5y+4z=8 この方程式をLU分解法で解き、係数行列をLU分解して得られるL行列とU行列の0でない成分及び解ベクトルを求めよ。マトリクスの成分は全て整数か仮分数で表現せよ、また連立方程式の順序を入れ替えずに解くこと。という問題です。 自分で考えてみたものの、講義で習ったのは定義だけで、理解することができなく全く解くことができません。 もう少し自分で考えてみろと思われると思いますが、どなたか解いてくださらないでしょうか・・・

  • LU分解

    次の連立方程式をLU分解を用いて計算したいです 2x+4y+6z=28 x-y+5z=7 4x+y-2z=21

  • 不完全LU分解前処理つき双共役勾配法についておしえてください。

    連立方程式を解くために不完全LU分解前処理つき双共役勾配法 について勉強しています。 前処理の際に、行列Aを不完全LU分解しその逆行列(LU)^(-1)というのを使用します。LU分解まではできたのですが、この逆行列は普通にLU分解+直接法という形でもとめるのでしょうか。だとしたら、直接法をつかっていてあまり高速化が期待できない様な気がしました。 不完全コレスキー分解つき共役勾配法(ICCG)のときは、不完全コレスキー分解後、間接的にAの逆行列をもとめて使用する方法がありましたのでなにかいい方法があるのかと思い質問しました。 はじめてのプログラミングで見当違いなことをいっているかもしれませんがよろしくおねがいします。

  • 対称行列の逆行列

    対称行列で、対角成分が正の値のみからなる行列があります。 この行列の逆行列の対角成分は正値のみからなるというのは正しいでしょうか。

  • 分散共分散行列の逆行列

    以下の行列を考えます. 行列X(M行N列,成分の値は分散1のガウスノイズ) 行列Xの分散共分散行列S(M行M列), 行列Sの逆行列Y(M行M列) N=M+1のときはN≠M+1のときに比べて行列Yの各成分の大きさがかなり大きくなる,という結果が得られました. (計算にはMATLABの関数covとpinvを用いました.) これは数学的に正しいことなのでしょうか. また,正しいとしたらどうしてこのようなことが起こるのでしょうか. 行列Yの計算結果の例を以下に示します.(行列Yを500回算出し,それらの平均値を示しています.) http://wisteria.orz.ne.jp/download/pinvcovX.jpg 縦・横方向の軸は行列Yのインデックスを,高さ方向の軸は行列Yの成分の値を示しています. 上述した現象の原因についてご教授いただけると幸いです.

  • 行列の分解不能性と逆行列の存在について

    いま、数学の問題を解いていて困っています。お助け下さい。 ある行列Xが分解不能である     ならば Xには逆行列が存在する という関係は成立するのでしょうか。 もし、関係があるのであれば、 ・固有値の存在 ・Xが非負行列である などの条件との関連も教えてください。 よろしくお願いします。

  • 逆行列を求めるアルゴリズムとコード化

    正則な正方行列Aの逆行列A^(-1)を求めるための数値計算のアルゴリズムを考えています。 AX=Bの場合、Xを求めるプログラムはガウスの消去法等でコード化することはできます。理論的にはA^(-1)があるとそれを左からかけるとXが求まりますが、そうなるとXとA^(-1)は同じ立ち位置なのかなと思ったのですが。XがわかってもA^(-1)はすぐには求まらないのでしょうか。未知数の数が違う(A^(-1)は3x3で、Xは3)のでそういうことになるのかと思いますが。逆行列は小行列で展開して求めていくという方向もあります。コンピュータで逆行列を求める計算アルゴリズムについてよろしくお願いします。行列のサイズとしては100x100程度まではいきたいのですが。

  • 逆行列の有無

    2行2列の行列で逆行列を持たないものの一般形として (ka ma)ですべての場合を表せているでしょうか?(k,mは実数) (kb mb) 「ある行列は逆行列を持たない」という設定で成分計算するときに、逆行列の場合分けのパターンが結構あるので大変です。