Вычисление интеграла многочлена 3-ой степени методом трапеций

Программа для расчета определенного интеграла многочлена 3 степени методом трапеций. Пользователь вводит коэффициенты многочленов, диапазон интегрирования, длину отрезка интегрирования.( Численное интегрирование)
method_trapeciy_cpp

#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
const double prec = 0.001; // точность вычисления
/* функция вычисления площади трапеции */
double getTrapezoidArea( double a, double b, double h )
{
   return ( a + b ) * h / 2.0;
}
double f( double a, double b, double c, double d , double x) //Функция расчета полинома f(x) 3 степени коэффициенты a, b, c, d
{
    return a * pow(x,3) + b * pow(x,2) + c * x + d;
}
int main()
{
   system("chcp 1251"); //Это для русского языка, можешь удалить
   system("cls");  
   double a = 0.0, b = 0.0, c = 0.0, d = 0.0; // коэффициенты многочлена 3 степени
   double y1 = 0.0, y2 = 0.0;
   double down = 0.0, up = 0.0; // пределы интегрирования
   double S = 0.0; // площадь под графиком
   cout << "Вычисление интеграла многочлена 3-ой степени с диапазоном интегрирования от a до b методом трапеции с точностью " << prec << endl;
   cout << "Введите коэффициенты полинома ax^3 +bx^2 +cx + d" << endl;
   cout << "a = ";
   cin >> a;
   if ( a == 0.0 )
   {
      cout << "Ошибка. Это не полином третей степени. Выход" << endl;
      exit( EXIT_SUCCESS );
   }
   cout << "b = ";
   cin >> b;
   cout << "c = ";
   cin >> c;
   cout << "d = ";
   cin >> d;
   cout << "Введите пределы интегрирования( от a до b, где a <= b )" << endl;
   cout << "Введите нижний предел: ";
   cin >> down;
   cout << "Введите верхний предел: ";
   cin >> up;
    if ( down > up )
   {
      cout << "Ошибка. Неправильно заданы пределы интегрирования. Выход" << endl;
      exit( EXIT_SUCCESS );
   }
   else if ( down == up )
   {
      S = 0.0;
   }
   else
   {
      S = 0.0;
      y1 = f(a,b,c,d, down); //Значение функции в начальной точке
      for ( double i = down + prec; i <= up; i += prec )
      {
         y2 = f(a,b,c,d,i); //Значение функции в следующей точке
         if ( y1 >= 0.0 && y2 >= 0.0 )
         {
            S += getTrapezoidArea( y1, y2, prec ); //Вычисляем площадь маленькой трапеции
         }
         y1 = y2; //Переходим к следующей точке
      }
   }
   cout << "Результат: " << S << endl;
   return 0;
}

Метод трапеций — метод численного интегрирования функции одной переменной, заключающийся в замене на каждом элементарном отрезке подынтегральной функции на многочлен первой степени, то есть линейную функцию. Площадь под графиком функции аппроксимируется прямоугольными трапециями. Алгебраический порядок точности равен 1.
Метод трапеций

Добавить комментарий