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

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

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

Численное интегрирование применяется, когда:

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

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

Пусть требуется вычислить определенный интеграл

{\displaystyle{S=\int_{a}^{b} f(t) \,dt} }

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

Аппроксимация прямоугольными трапециями

Площадь каждой составляющей прямоугольной трапеции можно определить как

{\displaystyle{s_i={\frac{f(t_i)+f(t_{i-1})}{2}} \cdot (t_i-t_{i-1})}}

Высота трапеций составляет небольшую величину такую, что на отрезке

{\displaystyle{\Delta t = t_i — t_{i-1}}}

функцию f(t) можно заменить линейной.

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

{\displaystyle{S= \sum_{i=a}^b s_i = \sum_{i=a}^b {\frac{f(t_i)+f(t_{i-1})}{2}} \cdot (t_i — t_{i-1})}}

Если высота трапеций принята постоянной, то значение интеграла можно вычислить как

{\displaystyle{S = \left({\frac{f(t_a)+f(t_b)}{2}} + \sum_{i = a+ \Delta t}^{b — \Delta t} f(t_i) \right) \cdot \Delta t}}

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

{\displaystyle{S \approx \sum_{i = a}^b f(t_i) \cdot \Delta t}}

Реализация на Си
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NUMPOINT 300 // количество точек
#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;
}

Результат выполнения

Как известно,

{\displaystyle{\int_0^\pi sin(t) dt = 2}}

Увеличение количества рассматриваемых точек и, соответственно, уменьшение шага (высоты трапеций) дают более точное значение интеграла:

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

Оставьте комментарий

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

Прокрутить вверх