- ベストアンサー
連立方程式を解法するjavaプログラム
連立方程式を解法するjavaプログラムを教えてください。宜しく、お願いします。 5a + 2b + 3c = 30 3a + 5b +4c = 20 2a + 3b + 5c = 50
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問内の方程式ですが「解」はありますか? 一応プログラムを作ってはみたのですが、解が出てこないです。 作ったプログラムに自分なりの方程式を組み込んで実行したら解が出てきたのであってると思います。 class Test{ public static void main(String[] args){ int a = 1; int b = 1; int c = 1; int maxA,maxB,maxC; boolean ok = false; final int AA = 5; final int AB = 2; final int AC = 3; final int AANS = 30; final int BA = 3; final int BB = 5; final int BC = 4; final int BANS = 20; final int CA = 2; final int CB = 3; final int CC = 5; final int CANS = 50; //a,b,cに入る最大数を確認 maxA = AANS/AA; if(maxA<BANS/BA){ maxA = BANS/BA; }else if(maxA<CANS/CA){ maxA = CANS/CA; } maxB = BANS/AB; if(maxB<BANS/BB){ maxB = BANS/BB; }else if(maxB<CANS/CB){ maxB = CANS/CB; } maxC = AANS/AC; if(maxC<BANS/BC){ maxC = CANS/BC; }else if(maxC<CANS/CC){ maxC = CANS/CC; } //ここで総当たり for(a=1; a<=maxA; a++){ if(ok){ a--; break; } for(b=1; b<=maxB; b++){ if(ok){ b--; break; } for(c=1; c<=maxC; c++){ if( (AA*a)+(AB*b)+(AC*c)==AANS && (BA*a)+(BB*b)+(BC*c)==BANS && (CA*a)+(CB*b)+(CC*c)==CANS){ ok = true; break; } } } } System.out.println("連立方程式の解"); System.out.println(AA + "a + " + AB + "b + " + AC + "c = " + AANS); System.out.println(BA + "a + " + BB + "b + " + BC + "c = " + BANS); System.out.println(CA + "a + " + CB + "b + " + CC + "c = " + CANS + "\n"); if(ok){ System.out.println("解:a=" + a + " b=" + b + " c=" + c); }else{ System.out.println("解無し"); } } } ちなみに今回、すべての数字を総当たりでチェックしています。 他に公式を使った方法等もありますが、質問者様は恐らくJava初心者と思われますので まずは上記ソースでどこで何をしてどうなっているかを確認された上で次のステップに進むのが良いと思います。
その他の回答 (2)
- axsies
- ベストアンサー率64% (38/59)
連立方程式を解くアルゴリズムとしては、掃き出し法がもっとも有名です。 ソースコードなら、”掃き出し法 java”とか”ガウスの消去法 java”とかで検索すれば一杯でてきます。 http://www1.bbiq.jp/sekiya_z/na/gaus_joa.html http://www.geocities.jp/supermisosan/gaussjava.html
お礼
貴重な、情報提供有難うございます。
補足
連立方程式の解き方に、いくつかの方法があることが、解りました。
- java0218
- ベストアンサー率100% (1/1)
投稿してから気がついたのですが、上記の3つの式はそれぞれ独立した方程式なのでしょうか? 下記ソースは3つの式が共通した方程式と思いコーディングしたものです。 もし、独立した方程式ならば、下記ソースをいじってください。
補足
共通した方程式です。
お礼
大変に丁寧な解説、有難うございました。 独立した式を解く場合は、プログラムの一部を修正すればよいのですね。