• ベストアンサー

連立方程式を解法するjavaプログラム

連立方程式を解法するjavaプログラムを教えてください。宜しく、お願いします。 5a + 2b + 3c = 30 3a + 5b +4c = 20 2a + 3b + 5c = 50

  • Java
  • 回答数3
  • ありがとう数6

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

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

質問内の方程式ですが「解」はありますか? 一応プログラムを作ってはみたのですが、解が出てこないです。 作ったプログラムに自分なりの方程式を組み込んで実行したら解が出てきたのであってると思います。 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初心者と思われますので まずは上記ソースでどこで何をしてどうなっているかを確認された上で次のステップに進むのが良いと思います。

ta246890
質問者

お礼

大変に丁寧な解説、有難うございました。 独立した式を解く場合は、プログラムの一部を修正すればよいのですね。

その他の回答 (2)

  • axsies
  • ベストアンサー率64% (38/59)
回答No.3

連立方程式を解くアルゴリズムとしては、掃き出し法がもっとも有名です。 ソースコードなら、”掃き出し法 java”とか”ガウスの消去法 java”とかで検索すれば一杯でてきます。 http://www1.bbiq.jp/sekiya_z/na/gaus_joa.html http://www.geocities.jp/supermisosan/gaussjava.html

ta246890
質問者

お礼

貴重な、情報提供有難うございます。

ta246890
質問者

補足

連立方程式の解き方に、いくつかの方法があることが、解りました。

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

投稿してから気がついたのですが、上記の3つの式はそれぞれ独立した方程式なのでしょうか? 下記ソースは3つの式が共通した方程式と思いコーディングしたものです。 もし、独立した方程式ならば、下記ソースをいじってください。

ta246890
質問者

補足

共通した方程式です。

関連するQ&A

  • 連立方程式のプログラム

    連立方程式を解くプログラムを10進ベーシックで組みたいのですが、 DEF文でしようとしてもできません。 DEF文は2つの関数には使用できないのですか? ちなみに解きたい連立方程式は a(n+1)=a(n)+2b(n) b(n+1)=a(n)+b(n) の a(n)/b(n) の答えが出るようにしたいのです。 10進ベーシック初心者です。用語とかもよくわからないので、うまく伝わらなかったらごめんない。

  • 連立方程式の解法

    連立方程式: Ax=B (A;係数行列、x;未知数、B;右辺行列) において detA = 0 であった場合、この解は一義的には定まらない という事なのですが、 このことはSOR法などの反復法も 使えないと言うこと言ってるのですか? detA = 0 の連立方程式はどうしても解けないのですか?

  • 連立方程式の解法を教えてください。

    連立方程式の正解に辿り着くまでの解法を教えてください。 問題は   x=70000+0.2y y=0.2x+100000 答えは  x=93750   y=118750 です。 どうしたら、その回答に行き着くかがどうしてもわかりません。 よろしくお願いいたします。

  • 2次曲線の交点、一般の2元連立2次方程式の行列を使った解法?

    一般の2元連立2次方程式の解法(2つの2次曲線の交点)を考えています。ベズーの定理より解は4個あると思います。 a*x^2+2h*xy+b*y^2+2l*x+2m*y+c=0 A*x^2+2H*xy+B*y^2+2L*x+2M*y+C=0 一つのアイデアは、一方を標準形にした後、他方へ代入し、x(もしくはy)の4次方程式を作ることだと思います。 2次曲線を行列を使って書いたとき、2つを連立した (X^t)(A)(X)=0 (X^t)(B)(X)=0 という形のベクトルX^t=(x,y,1)に関する連立方程式を解くという方法はあるのでしょうか? また、極座標を使った解法やパラメーターを使った解法などはあるのでしょうか?

  • 連立方程式

    以下の連立方程式の解法を御教授頂きたいです。 (a1*x1+a2*x2)^2+(a1*x3+a2*x4)^2=a3^2 (b1*x1+b2*x2)^2+(b1*x3+b2*x4)^2=b3^2 (c1*x1+c2*x2)^2+(c1*x3+c2*x4)^2=c3^2 (d1*x1+d2*x2)^2+(d1*x3+d2*x4)^2=d3^2 a1~b3、b1~b3、c1~c3、d1~d3は定数です。 地道に式を変換してx4、x3と代入してx4、x3を消していき、 x1、x2の連立方程式まで算出しましたが、式が複雑化し、 解けなくなりました。 未知数が4で、式が4つあるので解けるとは思いますが、 うまくいきません。 どうかアドバイスをお願い致します。

  • 連立一次方程式を解くプログラム

    すこし煩雑な(21×11です)の連立一次方程式を解くプログラムを作りたいのですが 何か良い文献、HPなどは無いでしょうか? いろいろなものを見ましたが大体縦横が同じ(n次元?)の 計算のヒントみたいなのしか見つけれませんでした。 プログラムはほとんどやったことが無いので、 ソースなどが公表されていてそれをちょっと書き換えれば 目的のものがつくれるというのが理想ですが・・・。 解法はガウスジョルダンとかガウスサイデル あるいは他にもっとよいものがあればそちらで構いません。 また、連立一次方程式のちゃんとした答え(言い方悪いですね)が求まらない場合、 近似解を算出することになると思うのですが これはどういった基準で「解」とされるのでしょうか? 計算の反復回数とかでしょうか? まとまりのない質問ですがよろしくお願いします。 何かあれば補足をお願いします。

  • Σを含む連立方程式の解法

    Σを含む連立方程式の解法がわからなくて困っています。 例えば X=Σ(Ax^n+Bx^-n)*con(nθ) とします。nは1~∞です。 この式を二つの境界条件に代入してXに含まれる定数AとBを導こうとしています。nは下のような境界条件により決定するものです。 例えば x=a X'+X=0     x=b X=cosθ のような感じです。(具体的には違いますが今回は簡単のため) しかし、nが増加するのに伴って未知の定数が無限に増えてしまって答えが得られないのでは?と思います。 こうゆう場合はどのような考え方で解くのですか? どなたか教えてください。

  • 連立方程式

    方程式を解いて、Aの値を求めなさい。 -3=A-B+C 0=4A+2B+C 9=9A+3B+C 連立の解き方がわかりません。簡単なとき方教えてください。よろしくお願いします。

  • 3連立非線型方程式の解法プログラム(ニュートン法)を教えてください

     未知数が3つで非常に難解な非線型方程式を3連立方程式にして解きたいと思っています。  ですが、手計算による代入法等の解法を行うと、とんでもなく式が長くなってしまいとても解けません。そこでc言語のプログラミングにて計算し、3連立方程式から3つ未知数の解を求めたいのですが、プログラミングはまったくの初心者であるため、いまいちよく分かりません。  解法プログラミングとしてはニュートン法が最も適切だとお聞きしました。ニュートン法にて例として下記のような式を解く場合、どのようにプログラムすれば良いか教えていただけたら幸いです。 例 2*x*x*x + 4*x*y + cos(z) = 0 x*x*y*z + logz + 2*y = 0 2*x*x + y*z +z*z*z +4 + e~(-xy) =0  この例は私が勝手に作成したので解は存在しているかわかりませんが、実際にこのような3連立非線型方程式を解く場合はどのようなプログラムになるか教えていただけたら幸いです。また、実際に私が解こうと思っている式はこの例より非常に長いものとなっています。あつかましいようですがそのことを考慮に入れてお教え頂けたら幸いです。何卒お願いいたしします。

  • この方程式のスマートな解法を教えてください.

    この方程式のスマートな解法を教えてください. (a-x)(1-x)^2 - (b^2 + c^2)(1-x) = 0 (a,b,c:const)