Vladislav_Bezruk

Simpson's method

Nov 16th, 2021 (edited)
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. double f(double x) {
  7.     return sqrt(1 + pow(x, 3));
  8. }
  9.  
  10. double oddSum(double f(double x), int n, double h, double a) {
  11.     double sum = 0;
  12.     for (int i = 1; i < (n / 2); i++) sum += f(a + (2 * i - 1) * h);
  13.     return sum;
  14. }
  15.  
  16. double evenSum(double f(double x), int n, double h, double a) {
  17.     double sum = 0;
  18.     for (int i = 2; i < (n / 2); i++) sum += f(a + (2 * i * h));
  19.     return sum;
  20. }
  21.  
  22. double SimpsonsIntegral(double f(double x), double a, double b, double eps) {
  23.     double intgrl = 0, prevIntgrl = 0, n = 2, h = (b - a) / n;
  24.  
  25.     do {
  26.         prevIntgrl = intgrl;
  27.         intgrl = (h * (f(a) + f(b) + 4 * evenSum(f, n, h, a) + 2 * oddSum(f, n, h, a))) / 3;
  28.        
  29.         n *= 2; h /=2;
  30.     } while(fabs(prevIntgrl - intgrl) >= eps);
  31.    
  32.     return intgrl;
  33. }
  34.  
  35. int main() {
  36.     cout << "Simpson's method:" << endl;
  37.     cout << "Integral = " << SimpsonsIntegral(f, 1, 3, 1e-4);
  38.    
  39.     return 0;
  40. }
Add Comment
Please, Sign In to add comment