static double caculate(double s,double e,Equation equation){
int cnt=20;//最多迭代次数
double d=1E-7;
double pre=0;
double cur=0;
long div=(long)((e-s)*100);//初始长度
while(cnt-->0){
cur=0;
double w=(e-s)/div;
for(long i=0;i<div;i++){
cur+=(equation.f((i*w+s))+equation.f((i*w+s+w)))/2*w;
}
if(cnt<10&&Math.abs(pre-cur)<d){
break;
}
div*=2;
pre=cur;
}
return cur;
}
interface Equation{
double f(double x);
}
public static void main(String[] args) {
System.out.println(caculate(0, 3, new Equation() {
@Override
public double f(double x) {
return x*x;
}
}));
}
常用工具包:
commons.math3.analysis.integration
http://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/index.html
别人实现参考:
https://blog.csdn.net/jiutianhe/article/details/41349649?_t=t