package info.istlab.Zemi01.miuramath; import java.util.ArrayList; public class Simpson { public static ArrayList<Double> allIntegral(PolyFunction func, ArrayList<Double> regions) { ArrayList<Double> results = new ArrayList<Double>(); for(int i=0;i<regions.size()-1;i++){ results.add(integral(func, regions.get(i), regions.get(i+1))); } return results; } public static double integral(PolyFunction func, double xl, double xr){ int N = 100; double dx = (xr-xl)/N; double goukei = 0; double x; // 奇数添字分の和 4/3(f_1+f_3+f_5+...+f_(n-1)) for(int i=1 ; i<N ; i+=2 ){ x = xl + i*dx; goukei = goukei + func.f(x)*dx*4/3; } // 偶数添字分の和 2/3(f_2+f_4+f_6+...+f_(n-2)) for(int i=2 ; i < N-1 ; i+=2){ x = xl + i*dx; goukei = goukei + func.f(x)*dx*2/3; } // 端 1/3(f_0+f_n) goukei = goukei + ( func.f(xl) + func.f(xr) )*dx/3; return goukei; } }