• ベストアンサー

行列式の解き方

こんにちは。プログラミングでわからないことがあったので質問します。文章がわかりにくかったらすみません・・・ 3行3列の行列式をガウスの消去法を使ってまず上三角行列を作り、その上三角行列を上三角行列の解法で解くというプログラムを作りたいのですが、2つの解法を使うときはプログラムはどうやって作ればよいでしょうか? 例えば、上三角行列が与えられてそれを上三角行列の解法を使って解いて結果を表示するといったプログラムだけ作るということならできるのですが、2つの解法を同時に同じプログラムで作るということが出来ません。教えていただきたいです。お願いします。

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

  • ベストアンサー
  • abingo333
  • ベストアンサー率100% (1/1)
回答No.2

二つの解法というのは、ガウスの消去法と上三角行列法のことですね。 質問のなかで言われているように、ガウスの消去法は上三角行列を作成して、(単純に言えば)後置代入で一番下の行から順番に解を得るものでしたよね。 ガウス消去法のなかで上三角法を使いたいならば、上三角解法の関数(メソッド)を先に作成し、ガウス消去法関数のなかで上三角法関数を呼ぶ。 上三角解法(引数){...} ガウス消去解法(引数) { 上三角解法(引数); } int main { ガウス消去解法(引数); } うーん、質問を理解してないのかも。

chobi20
質問者

補足

返信ありがとうございます。 上のようになるようにプログラムを作ろうとしたのですが、 ガウス消去解法(引数) { 上三角解法(引数) } のところの作り方がよくわかりませんでした。 ガウス消去解法の関数はfor文などを用いて作ったのですが、それはどこに入れれば良いですか?

その他の回答 (1)

  • abingo333
  • ベストアンサー率100% (1/1)
回答No.1

やりたいことがはっきり伝わっていないかもしれませんが、 LU分解による解法{Ax=(LU)x=L(Ux)=b}をみればよいと思いました。 次の文献に説明およびプログラムが載っています。 手持ちは原本(古いので言語はCです)ですが、邦訳本が出版されています。 学生さんならば、図書館にはあると思いますので眺めてください。 NUMERICAL RECIPES In C  by Wiliam H. Pess Brian P.Flannery Saul A.Teukolsky Wiliam T. Vetterling の共著です。

chobi20
質問者

補足

返信ありがとうございます。 図書館で探したのですが、見つかりませんでした。 他の本も見てみたんですが、プログラム自体が難しく書いてあって理解できませんでした。 なので、自分が作った上三角行列を解くプログラムを細かいところは省略して書くと(3行3列の場合)、 #include <stdio.h> int main(void) { int i,k; double d; double a[3][3]= ←数値代入 double b[3]= double x[3]; for(i=3-1;i>=0;i++)   ←上三角行列の解法 { for(・・・ }      for(i=0;i<=3-1;i++) printf("x[%d]=%lf\n",i,x[i]; return 0;} という感じで作りました。でもこれは上三角行列が与えられているときに使うので、上三角行列でないときにはまずガウスの消去法を使って上三角行列にしたいのです。 自分はプログラムが苦手なので分からないことが多いのですが、 main文の中にガウスの消去法と上三角行列の解法を一緒に入れて実行することはできるのでしょうか? それともmain文とは別に関数を作らないとできないですか?

関連するQ&A