2009-09-16 12 views
10

Iは、以下のもののような3つの式を有する:javaで方程式を解くには?

  • X + Y + Z = 100。
  • x + y-z = 50;
  • x-y-z = 10;

Javaでx、y、zの値を見つけるにはどうすればよいですか?

String equation1="x+y+z=100;"; 
String equation2="x+y-z=50;"; 
String equation3="x-y-z=10;"; 

int[] SolveEquations(equation1,equation2,equation3) { 
    // to do 
    // how to do?  
} 

可能な解決策または他の共通のフレームワークはありますか?

+5

この宿題はありますか? – KLE

+14

私は人々が宿題を引き受けるのをやめようと思っています。 「配列のソートをO(ログn)にする非再帰アルゴリズムを書く」のような教科書の問題から、誰かが何かを投稿した場合、それは一つのことです。 –

+0

さまざまな言語のサンプルコードを持つ別のソースは、[ここにある](http://www.cs.umbc.edu/~squire/cs455_l3.html) – DaveJohnston

答えて

9

行列式を使用してxyとzの値を計算できます。 ロジックはここにあります。http://www.intmath.com/Matrices-determinants/1_Determinants.php

そして、3次元配列を使ってjavaで実装する必要があります。

+0

あなたが推薦したURLはとても良いです。もう一度ありがとうございます。 –

+2

これは数学的には有効ですが、効率的ではありません。 はトランスクリプトを参照してください - 18.06 を教える教授ギルバートストラングのビデオ講義から20講演「あなたがしなければならないとしたら - 。とMATLABは決して、それを行うことはない 私が意味する、それが排除を使用します。」 http://ocw.mit.edu/OcwWeb/Mathematics/18-06Spring-2005/VideoLectures/detail/lecture20.htm –

+6

行列式の計算はO(n!)です。ガウス消去はO(n^2)です。 – erikkallen

6

ANTLRを使用してパーサーを作成します。次にGaussian eliminationを使用してASTを評価します。

+1

waoh、知識はとてもプロフェッショナルです。私は消化する時間が必要です。 –

+0

私は解析と線形解決の間の接続を得ることがわかりません。 –

+0

全くありません - これは線形代数問題です。 ANTLRは適用されません。 – duffymo

11

は、Javaを書いているので、あなたはこれを解決するJAMAパッケージを使用することができます。私は良いLU分解メソッドをお勧めしたいと思います。

これは単純な線形代数問題です。あなたは手でそれを解決するか、Excelのようなものを使って簡単に解決できるはずです。いったんそれを持っていれば、ソリューションを使用してプログラムをテストできます。

もちろん、解決策があるという保証はありません。行列が特異である場合、その3つの線が3D空間に交差していないことを意味します。

+0

LU分解を好む理由は何ですか? –

+1

"LU分解は、異なるbに対して行列式を複数回解く必要がある場合にのみ計算効率が良くなります。この場合、行列AのLU分解を一度実行してから、異なるbの三角行列を解く方が高速です毎回ガウス消去を使用してください。 - 複数の荷重ベクトルを使用した有限要素解析に共通。あなたは正しい - この場合は問題ではないかもしれない。 – duffymo

+0

@duffymo、説明のおかげで。 –

5

Commons Mathも使用できます。彼らはuserguide(3.4を参照)にこれのセクションを持っています

6

あなたはJavaマトリックスパッケージJAMAを使用することができます。下記のこの例の全ページを参照してくださいhere

/* 
*Solving three variable linear equation system 
* 3x + 2y - z = 1 ---> Eqn(1) 
* 2x - 2y + 4z = -2 ---> Eqn(2) 
* -x + y/2- z = 0 ---> Eqn(3) 
*/ 
import Jama.Matrix; 
import java.lang.Math.*; 
public class Main { 
    public Main() { 
     //Creating Arrays Representing Equations 
     double[][] lhsArray = {{3, 2, -1}, {2, -2, 4}, {-1, 0.5, -1}}; 
     double[] rhsArray = {1, -2, 0}; 
     //Creating Matrix Objects with arrays 
     Matrix lhs = new Matrix(lhsArray); 
     Matrix rhs = new Matrix(rhsArray, 3); 
     //Calculate Solved Matrix 
     Matrix ans = lhs.solve(rhs); 
     //Printing Answers 
     System.out.println("x = " + Math.round(ans.get(0, 0))); 
     System.out.println("y = " + Math.round(ans.get(1, 0))); 
     System.out.println("z = " + Math.round(ans.get(2, 0))); 
    } 

    public static void main(String[] args) { 
     new Main(); 
    } 
}