• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ガウスの消去法)

ガウスの消去法で逆行列を求める方法

このQ&Aのポイント
  • ガウスの消去法で逆行列を求める方法について詳しく教えてください。
  • ガウスの消去法を使って逆行列を求める際に問題が発生しています。どこが悪いのか教えていただけますか?
  • ガウスの消去法を使用して逆行列を求めるためのソースコードが上記になります。どなたか助けていただけませんか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

多分、 if(i==k){ A[i][j]/=temp; InvAf2[i][j]/=temp; } は、i==kの時では遅すぎると思う。 あと、B,Cは、別に必要ない。 というか、自動変数(スタックに確保する数)としては、サイズが大きすぎるかもしれません。(それは、呼び出し元のプログラムにも言える) staticとするか、mallocしてヒープに確保した方がいいと思う。 G,Rは、正則だと思うので、D(次元)だけで良いと思う。 以上の点に注意して書き直してみました。 void MINV(double A[][10],double InvAf2[][10],int D){ int i,j,k; double temp; for(k=0;k<D;k++){ temp=A[k][k]; for(j=0;j<D;j++){ A[k][j]/=temp; InvAf2[k][j]/=temp; } for(i=0;i<D;i++){ if(k!=i){ temp=A[i][k]; for(j=0;j<D;j++){ A[i][j]-=A[k][j]*temp; InvAf2[i][j]-=InvAf2[k][j]*temp; } } } } }

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1です void MINV(double A[][10],double InvAf2[][10],int D){ は、 void MINV(double A[][100],double InvAf2[][100],int D){ ですね。すみません。

star_blue
質問者

お礼

お礼が遅れて大変申し訳ありませんでした。 おかげさまで、正しく逆行列を求めることが できました。 今後も、お世話になることがあれば どうぞよろしくお願いします ありがとうございました。

関連するQ&A