public double Simpsons1 double double double int eps int double eps I1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
public double Simpsons1(double a,double b,double h){
int eps = (int)((b - a) / h);
double I=eps+1, I1=0;//I-предыдущее вычисленное значение интеграла, I1-новое, с большим N.
for (int N=2; (N<=4)||(Math.abs(I1-I)>eps); N*=2){
double sum2=0, sum4=0, sum=0;
h=(b-a)/(2*N);//Шаг интегрирования.
for (int i=1; i<=2*N-1; i+=2){
sum4+=func(a+h*i);//Значения с нечётными индексами, которые нужно умножить на 4.
sum2+=func(a+h*(i+1));//Значения с чётными индексами, которые нужно умножить на 2.
}
sum=func(a)+4*sum4+2*sum2-func(b);//Отнимаем значение f(b) так как ранее прибавили его дважды.
I=I1;
I1=(h/3)*sum;
}
return I;
}