簡単な質問。情報付きの10000行を取得しました。各行に2つの値があります。行の形式は:(時間、水速)です。数値積分を使用してセンサーを通過した水量を解決したいのですが、Javaでこれを解決する方法に非常に混乱しています。
グラフはいいと思いますが、グラフィカルである必要はないので、配列リストでうまくいくかもしれません。
ヒント、ヒント、コツをいただければ幸いです。
これには台形則を使用できます。間隔を時間で並べ替えてから、次のように合計を計算します。
// assume that time is expressed using some class
Time[] time = ...
// assume that the water speed is double, expressed in volume per unit of time.
// Further assume that Time units match the units in the denominator of water speed,
// e.g. if the speed is in galons per minute, then the time unit is minutes;
// if the speed is in galons per second, then the time unit is seconds, and so on
double[] speed = ...
double sum = 0;
for (int i = 0 ; i < time.length-1 ; i++) {
double deltaT = time[i+1].subtract(time[i]).toTimeUnits();
// This is the formula for the trapezoidal rule on non-uniform grid
sum += (speed[i]+speed[i+1])*deltaT;
}
double totalFlow = sum / 2;
そのデータが (時間、速度) のペアとして既にあり、一定期間の総フローを積分したい場合は、数値積分 (Euler、Simpson、Runga-Kutta など) を使用しないのはなぜですか? 値を読み取り、それらを統合ルーチンにフィードすれば完了です。
おそらく、 Apache Commons Mathが出発点として適しているでしょう。
グラフィック表現は素晴らしく、数値結果を適切にチェックできますが、必須ではありません。