SHARE
TWEET

Untitled

a guest Nov 14th, 2019 82 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include<vector>
  3. using namespace std;
  4. double function(double x) {
  5.     double func = tanh(x);
  6.     return func;
  7. }
  8. double INTEGRAL_Trapecia(double a, double b,int n) {
  9.     double dy = abs((b - a) / n);
  10.     double y = (function(a) + function(b))/2;
  11.     for (int i =1; i <n; i++) {
  12.         y += function(a+i*dy);
  13.     }
  14.     y *= dy;
  15.     return y;
  16. }
  17.  
  18. double INTEGRAL_Simpsona(double a, double b, int n) {
  19.     double dy = abs((b - a) /(double)n);
  20.     double y1 = 0, y2 = 0;
  21.     double y = function(a) + function(b);
  22.     for (int k = 1; k <n ; k+=2) {
  23.         y1 += function(a+k*dy);
  24.     }
  25.     for (int k = 2; k < n ; k+=2) {
  26.         y2 += function(a+k*dy);
  27.     }
  28.     y += 4. * y1 + 2. * y2;
  29.     y *= dy / 3.;
  30.     return y;
  31. }
  32.  
  33. double INTEGRAL_Rectangle(double a, double b, int n) {
  34.     double dy = (b - a) / n;
  35.     double m=0;
  36.     for (int k = 1; k < n; k++) {
  37.         m += function((a + k * dy) - dy / 2);
  38.     }
  39.     m *= dy;
  40.     return m;
  41. }
  42. int main() {
  43.     setlocale(LC_ALL, "russian");
  44.     cout << "Выберите метод которым хотите посчитать:\n1.Метод трапеций\n2.Метод Симпсона\n3.Метод прямоугольников\n";
  45.     while (true) {
  46.        
  47.         int z;
  48.         cin >> z;
  49.         if (z == 1) {
  50.             double a, b, eps;
  51.             cout << "Введите пределы интегрирования" << endl;
  52.             cout << "a=";
  53.             cin >> a;
  54.             cout << "b=";
  55.             cin >> b;
  56.             cout << "Введите  точность ";
  57.             cin >> eps;
  58.             int count = 0;
  59.             int n = 2;
  60.             while (abs(INTEGRAL_Trapecia(a, b, n) - INTEGRAL_Trapecia(a, b, 2 * n)) > eps) {
  61.                 cout.precision(15);
  62.                 cout << INTEGRAL_Trapecia(a, b, n) << endl;
  63.                 count++;
  64.                 n*=2;
  65.             }
  66.             cout << count << endl;
  67.             double y = INTEGRAL_Trapecia(a, b, n);
  68.             cout << "Значение интеграла в этих пределах " << y << endl;
  69.             cout << "Количество разбиений " << n << endl;
  70.         }
  71.         if (z == 2) {
  72.             double a, b, eps;
  73.             cout << "Введите пределы интегрирования" << endl;
  74.             cout << "a=";
  75.             cin >> a;
  76.             cout << "b=";
  77.             cin >> b;
  78.             cout << "Введите  точность ";
  79.             cin >> eps;
  80.             int count = 0;
  81.             int n = 2;
  82.             while (abs(INTEGRAL_Simpsona(a, b, n) - INTEGRAL_Simpsona(a, b, 2 * n)) > eps) {
  83.                 cout.precision(15);
  84.                 cout << INTEGRAL_Simpsona(a, b, n) << endl;
  85.                 n *= 2;
  86.                 count++;
  87.             }
  88.             cout << count << endl;
  89.             double y = INTEGRAL_Simpsona(a, b, n);
  90.             cout << "Значение интеграла в этих пределах " << y << endl;
  91.             cout << "Количество разбиений " << n << endl;
  92.         }
  93.         if (z == 3) {
  94.             double a, b, eps;
  95.             cout << "Введите пределы интегрирования" << endl;
  96.             cout << "a=";
  97.             cin >> a;
  98.             cout << "b=";
  99.             cin >> b;
  100.             cout << "Введите  точность ";
  101.             cin >> eps;
  102.             int n = 2;
  103.             int count = 0;
  104.             while (abs(INTEGRAL_Rectangle(a, b, n) - INTEGRAL_Rectangle(a, b, 2 * n)) > eps) {
  105.                 cout.precision(15);
  106.                 cout << INTEGRAL_Rectangle(a, b, n) << endl;
  107.                 count++;
  108.                 n*=2;
  109.             }
  110.             cout << count << endl;
  111.             double y = INTEGRAL_Rectangle(a, b, n);
  112.             cout << "Значение интеграла в этих пределах " << y << endl;
  113.             cout << "Количество разбиений " <<n<< endl;
  114.         }
  115.     }
  116.     return 0;
  117. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top