Численное интегрирование методом трапеций

Алгоритмизация / Численное интегрирование методом трапеций

Численное интегрирование — вычисление значения определённого интеграла (как правило, приближённое).Численное интегрирование применяется, когда:

  • подынтегральная функция не задана аналитически (например, она представлена в виде массива значений в узлах некоторой расчётной сетки);
  • аналитическое представление подынтегральной функции известно, но аналитическое выражение ее первообразной затруднено.

Основная идея большинства методов численного интегрирования состоит в замене подынтегральной функции на более простую, интеграл от которой легко вычисляется аналитически. Наиболее часто с этой целью используется метод трапеций.

Пусть требуется вычислить определенный интеграл
Определенный интеграл
Как известно, определенный интеграл представляет собой площадь под кривой, ограниченной подынтегральной функцией. Для вычисления определенного интеграла площадь под кривой аппроксимируется прямоугольными трапециями
Аппроксимация прямоугольными трапециями

Площадь каждой составляющей прямоугольной трапеции можно определить как
Площадь прямоугольной трапеции
Высота трапеций составляет небольшую величину такую, что на отрезке
Высота трапеции
функцию f(t) можно заменить линейной.

При этом площадь под графиком функции можно вычислить как сумму площадей составляющих прямоугольных трапеций.
Вычисление интеграла методом трапеций
Если высота трапеций принята постоянной, то значение интеграла можно вычислить как

Численное интегрирование методом трапеций: формула
В случае если величина Δt достаточно мала и количество дискретных точек, в которых определяется значение функции f(t) достаточно велико, указанную выше формулу с допустимой погрешностью можно заменить приближенной
integral7
Реализация

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NUMPOINT 3000 // количество точек
#define PI 3.1415926536
// Функция вычисления определенного интеграла
double Integral(double *f, double step){
  double value = 0;
  for (int i = 0; i < NUMPOINT; i++){
    value += f[i];
  }
  value *= step;
  return value;
}
int main() {
  double *f;
  double step, t;
  double S;
  int i;
  system("chcp 1251");
  system("cls");
  f = (double*)malloc(NUMPOINT*sizeof(double));
  printf("Количество точек = %d\n", NUMPOINT);
  step = PI/NUMPOINT; // величина шага (высота трапеций)
  printf("Величина шага = %lf\n", step);
  t = 0.0;
// Инициализация значений функции f(t)=sin(t)
  for (i=0; i<NUMPOINT; i++) {
    f[i] = sin(t);
    t += step;
  }
  S = Integral(f, step); // вычисление интеграла
  printf("Значение интеграла = %lf", S);
  getchar();
  return 0;
}

Результат выполнения
Численное интегрирование методом трапеций
Как известно,
Интеграл sin(t)
Увеличение количества рассматриваемых точек и, соответственно, уменьшение шага (высоты трапеций) дают более точное значение интеграла:
Численное интегрирование методом трапецийНазад


Назад: Алгоритмизация

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *