У меня есть своя небольшая подпрограмма для численного интегрирования (квадратура), которая представляет собой адаптацию C ++ программы ALGOL, опубликованной Bulirsch & Stoer в 1967 году (Numerische Mathematik, 9, 271-278).
Я хотел бы перейти на более современный (адаптивный) алгоритм и задаться вопросом, есть ли какие-либо (бесплатные) библиотеки C ++, которые предоставляют такие. Я выглядел как GSL (это C), но это идет с ужасным API (хотя цифры могут быть хорошими). Что-нибудь еще?
Полезный API будет выглядеть так:
double quadrature(double lower_integration_limit,
double upper_integration_limit,
std::function<double(double)> const&func,
double desired_error_bound_relative=1.e-12,
double desired_error_bound_absolute=0,
double*error_estimate=nullptr);
c++
quadrature
Вальтер
источник
источник
gsl_function
это указатель на функцию вместе с некоторым непрозрачным указателем на данные, который может содержать ваше состояние. Во-вторых, существуют некоторые проблемы с эффективностью (пере) распределения произвольно больших рабочих буферов, так что эта часть имеет хотя бы какое-то обоснованное обоснование.Ответы:
Посмотрите на Odeint . Теперь он является частью Boost и включает в себя алгоритм Bulirsch-Stoer среди других. Для начала вы можете увидеть здесь очень простой пример.
источник
MFEM [1] имеет простые в использовании квадратурные функции (как для поверхностных, так и для объемных элементов). Мы смогли использовать их для различных задач.
[1] http://mfem.org/
источник
Вы можете легко написать тонкую оболочку C ++ вокруг квадратурных функций GSL. Следующие требования C ++ 11.
Вывод
источник
У меня был успех с библиотекой Cubature (хотя она написана на C). Он нацелен на многомерную интеграцию с относительно небольшим количеством измерений.
Библиотека HIntLib написана на C ++ и содержит подпрограммы для адаптивной квадратуры (кубатуры).
источник
Проверьте https://github.com/tbs1980/NumericIntegration . Он основан на QUADPACK (на котором также основан GSL) и обладает некоторыми изящными современными функциями, например, основанными на Eigen, поддержкой мультиточности.
источник