• 締切済み

LU分解

題のとうりです。LU分解が全く理解できません...。教科書を見てもさっぱりですしネットで検索してみたんですが具体例がのってないので困っています (1 2 3) (4 5 6) (7 8 9) 例えば上記のような行列があったとしてこれをLU分解したらどうのような手順でなるのでしょうか?お願いします。

  • ogihs
  • お礼率57% (15/26)

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

とりあえず L と U をそれぞれ適当に変数を使って書いて, あとは「積 LU が与えられた行列になる」という方程式をひたすら解けばいいだけ. どちらかの対角成分を全部 1 とおくのが普通だけど, どっちだったかなぁ....

ogihs
質問者

お礼

アドバイスありがとうございます。ガウスの前進消去法で解いてみたら一応解けたみたいです。

関連するQ&A

  • LU分解

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

    • ベストアンサー
    • Java
  • LU分解

    次の行列式をLU分解したいです。 2, 5, 4 (1, 4, 3) 1,-3,-2

  • すみません。行列式のLU分解について質問なんですが。

    すみません。行列式のLU分解について質問なんですが。 ある行列式AをLU分解するまではいいのですが、その後、どうやって固有値を求めたらいいのでしょうか? QR分解で求める方法の方が効率が良いのはわかっているのですが、気になるので、教えてもらえたら幸いです。 あと、あまり数学が得意でないので、噛み砕いて説明していただけるとほんと助かります。

  • LU分解の誤差

    javaで               元が{{a},{b},{c}}という3行1列の行  LU分解すると{{d},{e},{f}} となる行列があるとすると      (a+b+c=15200)-(d+e+f=15082)=128となり128の誤差がでるんですが誤差128はやはり大きすぎるので正しくLU分解が行われていないのでしょうか?

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

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

  • 行列のLU分解について教えてください

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

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

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

  • LU分解について

    こんにちは。 行列のLU分解のcによるプログラムを勉強している者です。 LU分解のcによるプログラムについてお尋ねしたいことがございます。 ニューメリカルレシピに、LU分解の方法として 以下のようなコードが記載せれておりました。 void ludcmp(double **a, int n, int *indx, double *d) { int i,imax,j,k; double big,dum,sum,temp; double *vv; // 各行の暗黙のスケーリングを記録する. vv=vector(n); *d=1.0; // まだ行交換していない. for (i=0;i<n;i++) { // 行についてループし,暗黙のスケーリングの情報を得る. big=0.0; for (j=0;j<n;j++) if ((temp=fabs(a[i][j])) > big) big=temp; if (big == 0.0) printf("Singular matrix in routine ludcmp\n"); // 最大要素が0なら特異行列である. vv[i]=1.0/big; // スケーリングを記録する. } for (j=0;j<n;j++) { // Crout法,列についてのループ for (i=0;i<j;i++) { // 方程式(2.3.12)のi=j以外 sum=a[i][j]; for (k=0;k<i;k++) sum -= a[i][k]*a[k][j]; a[i][j]=sum; } big=0.0; for (i=j;i<n;i++) { sum=a[i][j]; for (k=0;k<j;k++) sum -= a[i][k]*a[k][j]; a[i][j]=sum; if ( (dum=vv[i]*fabs(sum)) >= big) { big=dum; imax=i; } } if (j != imax) { for (k=0;k<n;k++) { dum=a[imax][k]; a[imax][k]=a[j][k]; a[j][k]=dum; } *d = -(*d); vv[imax]=vv[j]; } indx[j]=imax; if (a[j][j] == 0.0) a[j][j]=TINY; if (j != n) { dum=1.0/(a[j][j]); for (i=j+1;i<n;i++) a[i][j] *= dum; } } free_vector(vv); } 例えば、LU分解させたい行列3×3の({4,7,6}{2,5,9}{3,1,8})だとしたら、 メイン関数にどのように書いたらLU分解を実行できるでしょうか? ニューメリカルレシピを買って読んでみたものの、よく理解できず、質問させていただきます。 稚拙な質問かもしれませんが、どうぞよろしくお願いいたします。

  • コレスキー分解

    現在、数学で固有値問題などを勉強しています。様々な参考書を借りて勉強しているのですが具体的な計算例がほとんど載っていないため理解できません。コレスキー分解というものでつまずいていますので質問します。対称行列においてCC'=Aのように上三角行列の転置行列である下三角行列C'とCの積に分解することをコレスキー分解というそうです。 例  4 2 2  A= 2 5 3 という行列をコレスキー分解すると    2 3 11    2 0 0   2 1 1 C'= 1 2 0 C= 0 2 1 となるのはどのような計算をしている    1 1 3   0 0 3  のですか。 CかC'のどちらかが求められればもう一方が求まるぐらいしか分かりません。方針でも構いませんので教えてください、お願いします。

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

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