を理解されたい
(xは、nは、配列のサイズを表す1-nは、値)がアレイの全体にわたってIは積分されます継続性を持って 各ステップ(1,2,3,4 ...?)ごとに異なる高さしか持たないので、その上に三角形の四角形があります。三角形の高さは、現在の高さと前の高さの差です。したがって、矩形の高さは、現在の高さの高さから三角形の高さを引いた値になります。 両方の領域を計算して加算する関数を記述します。 Array内のすべてのポイント/アイテムに対してこれを行うと、 "関数"の積分値が得られます。
EDIT:コードを少し書きました。保証はありません、私はちょうどこの積分probのアイデアを理解しやすいコードをコーディングしました。更なる改善が行われなければならない。
public static double getIntegralFromArray(double[] ar, double xDist)
{
double base = 0;
double prev = 0;
double triHeight = 0;
double rectHeight = 0;
double tri = 0;
double rect = 0;
double integral = 0;
for (int i = 0; i < ar.length; i++) {
triHeight=Math.abs(ar[i]-prev); // get Height Triangle
tri = xDist*triHeight/2; // get Area Triangle
if(ar[i]<=prev){
rectHeight = Math.abs(base-ar[i]); // get Height Rectangle
}else {
rectHeight = Math.abs(base-(ar[i]-triHeight)); // get Height Rectangle
}
rect = xDist*rectHeight; // get Area Rectangle
integral += (rect + tri); // add Whole Area to Integral
prev=ar[i];
}
return integral;
}
double[] ar = new double[]{1,2,3,2,2,3,1,3,0,3,3};
System.out.println(MyMath.getIntegralFromArray(ar, 1));
Area under 'curve': 21.5
それは実装に正確に難しいことではありません[シンプソン](HTTPS(約)://en.wikipedia .org/wiki/Simpson%27s_rule)... –
私はこの機能を呼び出すコードの性質に基づいて、最適化されたライブラリを利用することをお薦めします。 – user1874538