Численное интегрирование — это вычисление значения определенного интеграла (как правило, приближенное).
Численное интегрирование применяется, когда:
- подынтегральная функция не задана аналитически (например, она представлена в виде массива значений в узлах некоторой расчетной сетки);
- аналитическое представление подынтегральной функции известно, но аналитическое выражение ее первообразной затруднено.
Основная идея большинства методов численного интегрирования состоит в замене подынтегральной функции на более простую, интеграл от которой легко вычисляется аналитически. Наиболее часто с этой целью используется метод трапеций.
Пусть требуется вычислить определенный интеграл
{\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}}
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}}
Увеличение количества рассматриваемых точек и, соответственно, уменьшение шага (высоты трапеций) дают более точное значение интеграла:
