• ベストアンサー

行列式の解き方

こんにちは。プログラミングでわからないことがあったので質問します。文章がわかりにくかったらすみません・・・ 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

  • 大規模行列の計算

    10000*10000の大規模行列を解くプログラムを作成したいと考えています。 行列は対称行列で疎行列です。一行あたりの非零要素は10~20程度しかなく、ほとんどが零要素になっています。 メモリの関係上[10000][10000]の配列の形で確保することはまず無理でした。なのでガウスの消去法は使えないかと思います。(使えるのかもしれませんが、要素のうまい記憶方法のアルゴリズムが浮かびません) 解法として、ウェーブ・フロント法を使おうと考えたのですが、計算前の行列内の零要素で上三角行列を求める過程において非零要素となる要素については、あらかじめ記憶しておかなければなりません。しかし、零要素から非零要素に変化する要素を発見するアルゴリズムがわかりません。 その方法や、そのほかの方法で10000*10000の大規模行列を解く方法があれば教えてください!

  • 大学数学(行列、ベクトル)の問題です。

    解法がわかりません。どなたか得意な方教えてください。 行列A(3行3列)は上三角で、以下のように与えられるとする。 A=[11-2]…1行目、 [011]…2行目、[001]]…3行目 ベクトルbをb=[5,0,-1]^Tとする。このときAX=bを満たすベクトルXを求めよ。 答 [2,1,-1]^T

  • 上三角行列

    上三角行列というものは必ずしも、正方行列なのでしょうか?? 1 1 0 1 0 0 0 0 このぎょうな行列も上三角行列というかと疑問におもってしましました。 初歩的ですがよろしくお願いします。

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

    以下の行列を考えます. 行列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の成分の値を示しています. 上述した現象の原因についてご教授いただけると幸いです.

  • BASICのプログラムで行列式の積の計算をしたいのですが…

    BASICのプログラムで「行列式の積」の計算をしたいのですが…どのようにして行ったらよいか分かりません。あいにく、大学の図書館が閉まってしまい、調べる事もできない状態で困っています。一例として、3行3列の行列式の積の計算をする方法のプログラムを教えてください。 後、計算結果がどのように表示されるかも教えていただけると嬉しいです。

  • 行列 直交行列

    直交行列について質問させて下さい。 前回の質問で直交行列の定義は理解できました。 前回の質問:http://okwave.jp/qa/q7221868.html >直交行列では A が含む列ベクトルが互いに >直交し、大きさが全て 1 になります。 >直交行列では A が含む行ベクトルが互いに >直交し、大きさが全て 1 になります。 上記内容ですが、例えば3×3行列の場合、 第1列と第2列、第1列と第3列、第2列と第3列がともに 直交(垂直=内積がゼロ)ということでしょうか? また、行も同様。 上の認識でOKでしょうか。 また、大きさが全て1となるとはどういうことなのでしょうか? 直交する場合は内積ゼロになるのではないでしょうか? 以上、ご回答よろしくお願い致します。

  • 行列の対角化について

    実対称行列A:= | 0 1 2 | | 1 1 3 | | 2 3 0 | に対し、tPAPが対角行列となるような実正則行列Pはどのように求めればよいのでしょうか? この場合は、固有値&固有ベクトルが簡単には求まらないので、簡単には対角化のための行列が求まりません。(たいていの問題では求まるんですが。) このような時は実二次形式を利用して解く、というような事は、色々見るのですが、いざやってみると行列Aの第1行第1列が"0"である事が非常に扱いづらいのです。つまり基本行変形だけで三角行列に変形できないのです。 どなたか教えていただけないでしょうか?

  • 多次元配列の行列

    1番 キーボードから3×3の行列の要素を2次元配列に入力した後、その値を表示するプログラムをさくせいせよ 2番 キーボードから3×4の行列の要素を2次元配列に入力した後、転置行列を出力するプログラムをさくせいせよ 3番 2つの行列A(3×3行列)、B(3×3行列)の買う要素の値をキーボードから2つの配列に入力し、2つの行列、並びに、それらの和、差、積の行列を出力するプログラムを作成せよ(Bに単位行列を入れて検算せよ) 4番 2行3列の行列と3行2列の積を求めるプログラムを作成せよ どなたかわからないでしょうか?? 数が多くてすみません。 わかる方お願いします!!

  • 行列式のプログラム

    適当な形式にて初期化された2つの2次元配列により、3×4行列Aと4×3行列Bの要素を表現し、積ABを求めて表示させるプログラムなんです。 ここまでならなんとかなるかもと思ったんですが、行列はAはプログラム中で以下の数値で初期化して、行列Bの要素はキーボードから入力させるようにしないといけないんです。。   2.0 3.0 4.0 5.0 A= 3.0 4.0 5.0 6.0   1.0 2.0 3.0 4.0 なんですけれども、教えていただけたらうれしいです。。 お願いします!!

  • 正則行列、ユニタリ行列、上三角行列、一意性の証明

    定理 任意のn次正則行列Aはユニタリ行列Uと,対角成分が正の実数であるような上三角行列(下三角でもいい)Tの積UT(TUでもいい)として一意的に表わされる 1.表示可能性の証明←完了 2.一意性の証明←写真はここ 下から3行目以降がわか りません B*=B^(-1)よりBは上三角かつ下三角? その対角成分b(i,i)はb(i,i)^2=1?

専門家に質問してみよう