NumericalIntegration

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

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

Пример использования

# настройка некоторых данных
x = collect(-π/2 : π/1000 : π/2)
y = sin.(x)

# интеграция с помощью трапецеидального метода (Trapezoidal) по умолчанию
integrate(x, y)

# интеграция с помощью конкретного метода
integrate(x, y, SimpsonEven())

# вычисление совокупного интеграла
Y = cumul_integrate(x, y)

# вычисление совокупного интеграла для каждого столбца массива
z = [sin.(x) cos.(x) exp.(x/pi)]
Z = cumul_integrate(x, z)

# вычисление совокупного интеграла для каждой строки массива
zp = permutedims(z)
ZP = cumul_integrate(x, zp, dims=1)

# Многомерная интеграция
Y = [i*j for i=x,j=y]
integrate((x,y), Y)

На данный момент доступны следующие методы:

  • Trapezoidal (по умолчанию)

  • TrapezoidalEven

  • TrapezoidalFast

  • TrapezoidalEvenFast

  • SimpsonEven

  • SimpsonEvenFast

  • RombergEven

В настоящее время для кумулятивных интегралов и многомерных интегралов используются только трапецеидальные методы (Trapezoidal).

Все методы, содержащие в названии Even, предполагают равномерное распределение данных. Все методы, содержащие Fast, опускают базовые проверки корректности и делают акцент на производительности. Следовательно, быстрые методы будут завершаться сбоем или выдавать неверные результаты, если вы укажете неправильные данные (векторы разной длины и т. д.). Для работы метода RombergEven необходимо равномерное распределение точек в степени 2 + 1 (9, 17, 33, 65, 129, 257, 513, 1025…​). Это полезно, если требуется контроль точности.