fork(5) download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static double f (double x) {
  11. return Math.sin(x*x+2*x);
  12. }
  13.  
  14. public static void main (String[] args) throws java.lang.Exception
  15. {
  16. Scanner in = new Scanner(System.in);
  17.  
  18. double a = in.nextDouble();//Нижний и верхний пределы интегрирования (a, b), погрешность (eps).
  19. double b = in.nextDouble();
  20. double eps = in.nextDouble();
  21.  
  22. double I=eps+1, I1=0;//I-предыдущее вычисленное значение интеграла, I1-новое, с большим N.
  23.  
  24. for (int N=2; (N<=4)||(Math.abs(I1-I)>eps); N*=2){
  25. double h, sum2=0, sum4=0, sum=0;
  26. h=(b-a)/(2*N);//Шаг интегрирования.
  27. for (int i=1; i<=2*N-1; i+=2){
  28. sum4+=f(a+h*i);//Значения с нечётными индексами, которые нужно умножить на 4.
  29. sum2+=f(a+h*(i+1));//Значения с чётными индексами, которые нужно умножить на 2.
  30. }
  31. sum=f(a)+4*sum4+2*sum2-f(b);//Отнимаем значение f(b) так как ранее прибавили его дважды.
  32. I=I1;
  33. I1=(h/3)*sum;
  34. }
  35. System.out.println(I1);
  36. }
  37. }
Success #stdin #stdout 0.17s 321344KB
stdin
1	3	0.0001
stdout
-0.1430575514724386