Интеграция (математика) в C++

Я ищу библиотеку для нахождения интеграла данного набора случайных данных (а не функция) в C++ (или C, но предпочтительно C++). Существует другой вопрос, спрашивающий об интеграции в C, но ответы обсуждают больше, как интегрировать функцию (я думаю...). Я понимаю, что это может быть сделано просто путем вычисления области при линейном сегменте между каждой парой точек от начала до конца, но я не изобрел бы велосипед, если это было уже сделано. Я приношу извинения заранее, если это - дубликат; я искал довольно экстенсивно напрасно. Моя математика не так сильна, как я хотел бы ее так, совершенно возможно, что я использую неправильную терминологию.

Заранее спасибо за любую справку!

Chris

Править: В случае, если кому-либо интересно, я чувствую себя подобно идиоту. Даже добавляя в наборе абстракции OO для создания моего другого кода легче использовать, который был, возможно, 30 строками кода. Это - то, что на расстоянии в 3 года от любого вида математики сделает Вам... благодарит за всю справку!

7
задан Community 23 May 2017 в 11:33
поделиться

5 ответов

Это тривиально. Если точки равны (x0, y0), (x1, y1), ..., (xN, yN), и точки упорядочены так, что x0 <= x1 <= ... <= xN, то интеграл равен

  • y0 * (x1 - x0) + y1 * (x2 - x1) + ...

без интерполяции (суммирование площадей прямоугольников) и

  • (y0 + y1) / 2 * (x1 - x0) + (y1 + y2) / 2 * (x2 - x1) + ...

с использованием линейной интерполяции (суммирование площадей трапеций).

Проблема особенно проста, если ваши данные - y0, y1, ..., yN и соответствующие значения x предполагаются равными 0, 1, ..., N. Тогда вы получите

  • y0 + y1 + ...

без интерполяции (суммирование площадей прямоугольников) и

  • (y0 + y1) / 2 + (y1 + y2) / 2 + ...

с использованием линейной интерполяции (суммирование площадей трапеций) ).

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

  • y0 / 2 + y1 + y2 + ...
13
ответ дан 6 December 2019 в 06:13
поделиться

Данные точки (x0, y0), (x1, y1) площадь под трапецией равна (x1 - x0) * (y0 + y1) / 2.

Вы можете вычислить всю площадь, суммируя их.

1
ответ дан 6 December 2019 в 06:13
поделиться

Ваши "случайные данные" состоят из набора пар (x,y). Прежде чем начать интегрирование, вы должны убедиться, что пары отсортированы в список, в котором значения для x монотонно возрастают. Как только вы это получите, интегрирования по трапеции будет достаточно. (оно же правило Симпсона).

1
ответ дан 6 December 2019 в 06:13
поделиться

у меня сегодня был экзамен по математике :) и у меня есть 3 правила для вас

Правило трапеции :

интеграл = h/2 * ( y0 + 2y1 + 2y2 + 2y3 ....... + yn)

Правило средней точки :

интеграл = h * ( y0.5 + y1.5 + y2.5 + .... y(n-0.5) )

y0. 5 означает значение y в точке между x0 и x1

Правило Симпсона :

интеграл = h/3 * ( y0 + 4y1 + 2y2 + 4y3 + 2y4 ....... + yn)

где h - шаг, который вы делаете, обычно это небольшое число (но не слишком маленькое, чтобы избежать ошибки округления). и n - количество периодов, которые вы берете

это были простые в применении методы... вы можете прочитать больше о квадратурах Гаусса также

ссылки :

12
ответ дан 6 December 2019 в 06:13
поделиться

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

2
ответ дан 6 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: