public class Trapezoid { public static double trapzd(MathFunction func, double a, double b, int n) { if (n==1) { s= 0.5*(b-a)*(func.f(a)+func.f(b)); return s; } else { int it= 1; for (int j= 0; j < n-2; j++) it *= 2; // Subdivisions double tnm= it; double delta= (b-a)/tnm; // Spacing of points to be added double x= a+0.5*delta; double sum= 0.0; for (int j= 0; j < it; j++) { sum += func.f(x); x+= delta; } s= 0.5*(s+(b-a)*sum/tnm); return s; } } private static double s; // Holds current estimate of integral. Do only 1 at a time. }