Newer
Older
Zemi01 / src / main / java / info / istlab / Zemi01 / miuramath / Simpson.java
@motoki miura motoki miura on 21 Jan 2023 915 bytes 数学関連
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;
	}

}