12

それを行う方法はありますか?曲線の下の領域が必要なアプリケーションがあり、数式が与えられているので、手元で積分を実行できれば、プログラムで実行できるはずですか?参照しているメソッドの名前が見つかりませんが、この画像はそれを示しています:http: //www.mathwords.com/a/a_assets/area%20under%20curve%20ex1work.gif

編集:返信するすべての人に、私はすでに長方形、台形、シンプソンの法則を実装しました。ただし、正確には10k以上のストライプが必要であり、関数の統合バージョンをプログラムで見つけることができないはずですか?そうでなければ、それには血なまぐさい正当な理由があるに違いありません。

4

7 に答える 7

4

数値積分
使用できる方法は複数あります。説明については、数値レシピ:科学計算の芸術をご覧ください。
Javaの場合、使用できるApaceCommonsライブラリがあります。統合ルーチンは、数値解析セクションにあります。

記号積分jScience
をチェックしてください。関数モジュールは、「かなり単純な記号数学分析(代数方程式の解法、積分、微分、式の計算など)のサポートを提供します」。 関数のタイプが指定されている場合、その特定のケースでは、標準ライブラリを使用する場合よりも高速に統合できる可能性があります。

于 2012-11-12T08:09:18.737 に答える
1

それを正確に計算するには、記号操作を実行するためのある種の数式処理システムライブラリが必要になります。このようなシステムの実装はかなり複雑であり、私はJava用の高品質のオープンソースライブラリに精通していません。ただし、要件を満たしていると仮定すると、台形公式を使用して曲線の下の面積を推定することもできます。結果がどれだけ正確である必要があるかに応じて、それに応じてサブディビジョンのサイズを変えることができます。

于 2012-11-12T08:10:38.803 に答える
0

すでに述べたシンプソンズ、台形、またはモンテカルロシミュレーションなどのルールを使用して、数値積分を使用できます。疑似ランダムジェネレータを使用します。

記号積分のためにいくつかのライブラリを試すことができますが、すべての積分の記号表現を取得できるかどうかはわかりません。

于 2012-11-12T09:06:18.583 に答える
0

シンプソンの公式または台形公式を使用することをお勧めします。これは、すべてのタイプのグラフを統合するのが非常に複雑になる可能性があるためです。

于 2012-11-12T08:06:23.513 に答える
0

数値解析、特に数値積分を参照してください。リーマン和法を使ってみませんか?

于 2012-11-12T08:08:13.527 に答える
0

シンプルですが効率的なアプローチは次のとおりです。

public static double area(DoubleFunction<Double> f, double start, double end, int intervals) {
  double deltaX = (end - start)/intervals;
  double area = 0.0;
  double effectiveStart = start + (deltaX / 2);
  for (int i=0; i<intervals; ++i) {
    area += f.apply(effectiveStart + (i * deltaX));
  }
  return deltaX * area;
}

これは、台形公式のバリエーションである中点法を使用したリーマン和です。ただし、台形の面積を計算する代わりに、間隔の中央でf(x)から長方形を使用します。これはより速く、より良い結果をもたらします。これが、xの有効な開始値が最初の間隔の中央にある理由です。そして、整数をループすることで、丸めの問題を回避します。

また、ループの終わりまで待ってから。を掛けることで、パフォーマンスを向上させdeltaXます。私はこのようにループを書くことができたでしょう:

for (int i=0; i<intervals; ++i) {
  area += deltaX * f.apply(effectiveStart + (i * deltaX)); // this is x * y for each rectangle
}

ただしdeltaX、一定であるため、ループが終了するまで待つ方が高速です。

于 2020-04-30T03:49:37.567 に答える
-1

数値積分の最も一般的な形式の1つは、ルンゲクッタ次数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つです。

于 2013-09-14T20:07:56.410 に答える