Численное интегрирование методом трапеций (реализация на C++)

C++   5 Февраль 2012  Автор статьи:  

Приведем пример реализации численного интегрирования методом трапеций. На вход алгоритму подается набор точек, по которым требуется найти приближенное значение интеграла неизвестной функции. На выходе алгоритм выдает найденное приближенное значение с 8-ю знаками точности. Все вычислительные операции производятся с типом данных long double в целях повышения точности вычислений.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <vector>
using namespace std;

// Для удобства хранения заданных точек
// создадим соответствующую структуру
struct point
{
    long double x, y;  
};

int main()
{
    // Объявляем и считываем число точек,
    // по которым будем вычислять приближенное
    // значение интеграла функции
    int pointsCount;
    cin >> pointsCount;

    // Точки будем хранить в векторе структур;
    // его размер, очевидно, равен pointsCount
    vector <point> points;
    points.resize (pointsCount);

    // Считываем абсциссы и ординаты точек
    for (int i = 0; i < pointsCount; i++)
    {
        cin >> points[i].x >> points[i].y;
    }  

    // Изначально приравниваем приближенное
    // значение интеграла к нулю
    long double integralValue = 0.0;

    // Для каждой пары соседних точек считаем
    // площадь трапеции, которую они образуют
    // вместе с осью абсцисс, по соответствующим
    // теоретическим формулам
    for (int i = 1; i < pointsCount; i++)
    {
        integralValue += (points[i].x - points[i - 1].x) * (points[i].y + points[i - 1].y);
    }

    // Для небольшого ускорения работы алгоритма
    // деление пополам выносят за пределы цикла
    integralValue /= 2.0;
   
    // Выводим приближенное значение интеграла
    // c восемью знаками точности
    printf ("%.8llf", integralValue);

    return 0;
}

  • domain

    а реализация правильная ?

  • domain

    а реализация правильная ?

Научиться программировать

  • на Delphi

  • на Java

  • на C++