Nun, sie erwarten Funktionen, weil seine normale, sie zu nutzen mit einer Kontinuität. Da Sie bei jedem Schritt nur eine andere Höhe haben (1,2,3,4 ...?), Haben Sie Rechtecke mit Dreiecken darauf. Die Höhe der Dreiecke ist die Differenz zwischen der aktuellen Höhe und der vorherigen Höhe. Daher ist die Höhe des Rechtecks die aktuelle Pinthöhe minus Dreieckshöhe. Schreiben Sie eine Funktion, die beide Bereiche berechnet und hinzufügt. Tun Sie dies für jeden Punkt/Element in Ihrem Array und Sie erhalten das Integral Ihrer "Funktion".
EDIT: Ich schrieb einen kleinen Code. keine Garantie, ich habe gerade einen leicht verständlichen Code für die Idee dieses integralen Problems programmiert. Weitere Verbesserungen müssen gemacht werden.
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
Es ist nicht gerade schwer zu [Regel Simpson] zu implementieren (https (ca.).: //en.wikipedia .org/wiki/Simpson% 27s_rule) für sich selbst ... –
Einverstanden, aber ich würde bevorzugen, optimierte Bibliotheken zu verwenden, basierend auf der Art des Codes, der diese Funktion – user1874538