Advertisement
kasper_k

mmm5l

Oct 28th, 2022 (edited)
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. typedef double(*pointFunc)(double);
  8.  
  9. double f(double x) {
  10.     return x*acos(x);
  11. }
  12.  
  13. double Leftrectangle_integral(pointFunc f, double a, double b, int n) {
  14.     double x, h;
  15.     double sum = 0.0;
  16.     double fx;
  17.     h = (b - a) / n;  //шаг
  18.  
  19.     for (int i = 0; i < n; i++) {
  20.         x = a + i * h;
  21.         fx = f(x);
  22.         sum += fx;
  23.     }
  24.     return (sum * h); //приближенное значение интеграла равно
  25.                       //сумме площадей прямоугольников
  26. }
  27.  
  28. double Rightrectangle_integral(pointFunc f, double a, double b, int n) {
  29.     double x, h;
  30.     double sum = 0.0;
  31.     double fx;
  32.     h = (b - a) / n;  //шаг
  33.  
  34.     for (int i = 1; i <= n; i++) {
  35.         x = a + i * h;
  36.         fx = f(x);
  37.         sum += fx;
  38.     }
  39.     return (sum * h); //приближенное значение интеграла равно
  40.                       //сумме площадей прямоугольников
  41. }
  42. int main() {
  43.     setlocale(LC_ALL, "RU");
  44.     double a, b, eps;
  45.     double s1, s;
  46.     int n = 1; //начальное число шагов
  47.  
  48.     cout << "Введите левую границу интегрирования a = ";
  49.     cin >> a;
  50.     cout << "\nВведите правую границу интегрирования b = ";
  51.     cin >> b;
  52.     cout << "\nВведите требуемую точность eps = ";
  53.     cin >> eps;
  54.  
  55.     s1 = Leftrectangle_integral(f, a, b, n); //первое приближение для интеграла
  56.     do {
  57.         s = s1;     //второе приближение
  58.         n = 2 * n;  //увеличение числа шагов в два раза,
  59.                     //т.е. уменьшение значения шага в два раза
  60.         s1 = Leftrectangle_integral(f, a, b, n);
  61.     } while (fabs(s1 - s) > eps);  //сравнение приближений с заданной точностью
  62.     cout << "\nМетод левых прямоугольников: интеграл = " << s1 << endl;
  63.     s1 = Rightrectangle_integral(f, a, b, n);
  64.     n = 1;
  65.     do {
  66.         s = s1;     //второе приближение
  67.         n = 2 * n;  //увеличение числа шагов в два раза,
  68.                     //т.е. уменьшение значения шага в два раза
  69.         s1 = Rightrectangle_integral(f, a, b, n);
  70.     } while (fabs(s1 - s) > eps);  //сравнение приближений с заданной точностью
  71.     cout << "Метод правых прямоугольников: интеграл = " << s1 << endl;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement