2012-11-12 7 views
12

これを行う方法はありますか?私はカーブの下の領域が必要なアプリケーションを持っています。私は数式を与えられています。統合を手にすることができれば、プログラマチックに行うことができますか?私が言及している方法の名前は見つけられませんが、この画像ではそれを示しています。http://www.mathwords.com/a/a_assets/area%20under%20curve%20ex1work.gifJavaのカーブの下の正確な面積を計算します

編集:私はすでに返信していますが、私はすでに長方形、台形、シンプソンのルールを実装しています。しかし、それらは正確であるために10k +ストライプのようになり、関数の統合バージョンをプログラムで見つけることができないはずですか?もしそうでなければ、それのために血まいしい正当な理由がなければならない。

+3

「血まみれの良い理由」は、しばしば「血まみれの難しい」ということです。 –

+0

誰かが以前にそれをやったことがあるならば、私たちは彼の実装を使用することができなければならず、統合は "import xxx; xxx.integrate(fctn);"と同じくらい短いか、ここで何か不足していますか? –

+0

それは本当です。私は誰かがJavaのためにこれをしたことを確信していない。たぶん別の質問 –

答えて

4

数値積分
複数の方法があります。説明については、Numerical Recipes: The Art of Scientific Computingをご覧ください。
Javaの場合、使用可能なApace Commonsライブラリがあります。統合ルーチンはNumerical Analysisセクションにあります。

シンボリック統合
チェックアウトjScienceFunctionsモジュール "は、(代数方程式を解く、統合する、微分する、式を計算するなど)、かなり単純な記号的な数学解析をサポートします。
関数の型が指定されている場合は、標準ライブラリを使用した場合よりも、その特定のケースでより高速に統合することができます。

0

SimpsonsルールまたはTrapeziumルールを使用することをお勧めします。これは、グラフの種類ごとに統合するには複雑すぎる可能性があるためです。

1

正確に計算するには、シンボル操作を実行するために何らかの種類のライブラリcomputer algebra systemが必要です。このようなシステムは実装するのがむしろ複雑で、私はJava用の高品質なオープンソースライブラリに精通していません。ただし、要件を満たしていると仮定すると、trapezoidal ruleを使用して曲線下の面積を見積もることもできます。結果がどの程度正確であるかによって、細分化のサイズを適宜変更することができます。

0

既に言及したSimpsons、Trapezoidal、またはMonte-Carlo simulationのような規則を使用してnumerical integrationを使用できます。擬似ランダムジェネレータを使用します。

シンボリックな統合のためにいくつかのライブラリを試すことができますが、すべての積分の記号表現を得ることはできません。

0

数値積分の最も一般的な形式の1つは、Runge-Kutta order 4(RK4)手法です。

double dx, //step size 
     y ; //initial value 
for(i=0;i<number_of_iterations;i++){ 
    double k1=f(y); 
    double k2=f(y+dx/2*k1); 
    double k3=f(y+dx/2*k2); 
    double k4=f(y+dx*k3); 
    y+= dx/6*(k1+2*k2+2*k3+k4); 
} 

を長方形、台形、およびシンプソンのルールよりもはるかに速く収束する:それは次のように実装があるのです。これは、物理シミュレーションにおける統合のために、より一般的に使用される技術の1つです。

関連する問題