Tengo mi propia subrutina para la integración numérica (cuadratura), que es una adaptación en C ++ de un programa ALGOL publicado por Bulirsch & Stoer en 1967 (Numerische Mathematik, 9, 271-278).
Me gustaría actualizar a un algoritmo más moderno (adaptativo) y preguntarme si hay bibliotecas C ++ (gratuitas) que lo proporcionen. Tenía un aspecto como GSL (que es C), pero eso viene con una API horrible (aunque los números pueden ser buenos). ¿Hay algo mas?
Una API útil se vería así:
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
Walter
fuente
fuente
gsl_function
es un puntero de función junto con algún puntero de datos opaco, que puede contener su estado. En segundo lugar, existen algunas preocupaciones de eficiencia sobre la (re) asignación de amortiguadores de trabajo arbitrariamente grandes, por lo que esa parte tiene al menos alguna justificación válida.Respuestas:
Echa un vistazo a Odeint . Ahora es parte de Boost e incluye el algoritmo Bulirsch-Stoer entre otros. Para comenzar puedes ver aquí un ejemplo muy simple.
fuente
MFEM [1] tiene funciones de cuadratura fáciles de usar (tanto para elementos superficiales como volumétricos). Pudimos usarlos para diversas tareas.
[1] http://mfem.org/
fuente
Puede escribir fácilmente un envoltorio delgado de C ++ alrededor de las funciones de cuadratura GSL. Lo siguiente necesita C ++ 11.
Salida
fuente
He tenido éxito con la biblioteca Cubature (aunque está escrita en C). Está dirigido a la integración multidimensional con un número relativamente bajo de dimensiones.
La biblioteca HIntLib está escrita en C ++ y tiene rutinas para la cuadratura adaptativa (cubature).
fuente
Echa un vistazo a https://github.com/tbs1980/NumericalIntegration . Se basa en QUADPACK (en el que también se basa GSL), y tiene algunas características modernas, por ejemplo, basadas en Eigen, soporte de multiprecisión.
fuente