public class Simpson { public static double qsimp(MathFunction func, double a, double b) { double ost= -1.0E30; // double os= -1E30; for (int j=0; j < JMAX; j++) { double st= Trapezoid.trapzd(func, a, b, j+1); s= (4.0*st - ost)/3.0; // See NumRec eq. 4.2.4 if (j > 4) // Avoid spurious early convergence if (Math.abs(s-os) < EPSILON*Math.abs(os) || (s==0.0 && os==0.0)) { System.out.println("Simpson iterations: " + j); return s; } os= s; ost= st; } System.out.println("Too many steps in qsimp"); return ERR_VAL; } private static double s; public static final double EPSILON= 1.0E-15; public static final int JMAX= 50; public static final double ERR_VAL= -1E10; }