J'ai mon propre petit sous-programme d'intégration numérique (quadrature), qui est une adaptation en C ++ d'un programme ALGOL publié par Bulirsch & Stoer en 1967 (Numerische Mathematik, 9, 271-278).
Je voudrais passer à un algorithme plus moderne (adaptatif) et me demander s'il existe des bibliothèques C ++ (gratuites) qui en fournissent. J'avais un look GSL (qui est C), mais cela vient avec une horrible API (bien que les chiffres soient bons). Y a-t-il autre chose?
Une API utile ressemblerait à ceci:
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
la source
la source
gsl_function
est un pointeur de fonction avec un pointeur de données opaque, qui peut contenir votre état. Deuxièmement, il y a des problèmes d'efficacité concernant la (ré) allocation de tampons de travail de taille arbitraire, de sorte qu'une partie a au moins une justification valable.Réponses:
Jetez un oeil à Odeint . Il fait maintenant partie de Boost et inclut entre autres l'algorithme Bulirsch-Stoer. Pour commencer, vous pouvez voir ici un exemple très simple.
la source
MFEM [1] possède des fonctions de quadrature faciles à utiliser (pour les éléments surfaciques et volumétriques). Nous avons pu les utiliser pour diverses tâches.
[1] http://mfem.org/
la source
Vous pouvez facilement écrire un wrapper C ++ fin autour des fonctions de quadrature GSL. Les éléments suivants ont besoin de C ++ 11.
Production
la source
J'ai eu du succès avec la bibliothèque Cubature (elle est cependant écrite en C). Il vise une intégration multidimensionnelle avec un nombre de dimensions relativement faible.
La bibliothèque HIntLib est écrite en C ++ et possède des routines pour la quadrature adaptative (cubature).
la source
Consultez https://github.com/tbs1980/NumericalIntegration . Il est basé sur QUADPACK (sur lequel GSL est également basé) et possède des fonctionnalités modernes soignées, par exemple basées sur Eigen, un support multiprécision.
la source