Ich habe meine eigene kleine Subroutine für die numerische Integration (Quadratur), eine C ++ - Adaption eines ALGOL-Programms, das 1967 von Bulirsch & Stoer veröffentlicht wurde (Numerische Mathematik, 9, 271-278).
Ich möchte auf einen moderneren (adaptiven) Algorithmus upgraden und mich fragen, ob es (kostenlose) C ++ - Bibliotheken gibt, die solche anbieten. Ich habe nach GSL gesucht (das ist C), aber das kommt mit einer schrecklichen API (obwohl die Zahlen gut sein können). Gibt es noch etwas?
Eine nützliche API würde folgendermaßen aussehen:
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
quelle
quelle
gsl_function
ein Funktionszeiger zusammen mit einem undurchsichtigen Datenzeiger ist, der Ihren Status enthalten kann. Zweitens gibt es einige Effizienzbedenken hinsichtlich der (Neu-) Zuweisung beliebig großer Arbeitspuffer, so dass dieser Teil zumindest eine gültige Rechtfertigung dafür hat.Antworten:
Schauen Sie sich Odeint an . Es ist jetzt Teil von Boost und enthält unter anderem den Bulirsch-Stoer-Algorithmus. Zu Beginn sehen Sie hier ein sehr einfaches Beispiel.
quelle
MFEM [1] verfügt über benutzerfreundliche Quadraturfunktionen (sowohl für Oberflächen- als auch für Volumenelemente). Wir konnten sie für verschiedene Aufgaben einsetzen.
[1] http://mfem.org/
quelle
Sie können leicht einen dünnen C ++ - Wrapper um die GSL-Quadraturfunktionen schreiben. Folgendes benötigt C ++ 11.
Ausgabe
quelle
Ich hatte Erfolg mit der Cubature-Bibliothek (sie ist jedoch in C geschrieben). Es zielt auf eine mehrdimensionale Integration mit einer relativ geringen Anzahl von Dimensionen ab.
Die HIntLib-Bibliothek ist in C ++ geschrieben und verfügt über Routinen für die adaptive Quadratur (Kubatur).
quelle
Überprüfen Sie https://github.com/tbs1980/NumericalIntegration . Es basiert auf QUADPACK (auf dem auch GSL basiert) und verfügt über einige nette moderne Funktionen, z. B. basierend auf Eigen, Multiprezisionsunterstützung.
quelle