Mam własną małą procedurę integracji numerycznej (kwadraturę), która jest adaptacją C ++ programu ALGOL opublikowanego przez Bulirsch & Stoer w 1967 r. (Numerische Mathematik, 9, 271-278).
Chciałbym uaktualnić do bardziej nowoczesnego (adaptacyjnego) algorytmu i zastanawiać się, czy istnieją (bezpłatne) biblioteki C ++, które to zapewniają. Wyglądałem jak GSL (który jest C), ale ma straszne API (chociaż cyfry mogą być dobre). Czy jest coś jeszcze?
Przydatny interfejs API wyglądałby tak:
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
źródło
źródło
gsl_function
jest wskaźnikiem funkcji wraz z pewnym nieprzezroczystym wskaźnikiem danych, który może zawierać twój stan. Po drugie, istnieją pewne obawy związane z wydajnością związane z (ponownym) przydzielaniem dowolnie dużych buforów roboczych, tak że część ma co najmniej pewne uzasadnione uzasadnienie.Odpowiedzi:
Spójrz na Odeint . Jest teraz częścią Boost i obejmuje między innymi algorytm Bulirsch-Stoer. Na początek możesz zobaczyć tutaj bardzo prosty przykład.
źródło
MFEM [1] ma łatwe w użyciu funkcje kwadraturowe (zarówno dla elementów powierzchniowych, jak i objętościowych). Byliśmy w stanie wykorzystać je do różnych zadań.
[1] http://mfem.org/
źródło
Możesz łatwo napisać cienkie opakowanie C ++ wokół funkcji kwadraturowych GSL. Poniższe potrzeby wymagają C ++ 11.
Wynik
źródło
Odniosłem sukces w bibliotece Cubature (choć jest napisana w C). Ma on na celu integrację wielowymiarową przy stosunkowo małej liczbie wymiarów.
Biblioteka HIntLib jest napisany w języku C ++ i ma rutyny Adaptive kwadraturze (kubaturowego).
źródło
Sprawdź https://github.com/tbs1980/NumericalIntegration . Opiera się na QUADPACK (na którym również opiera się GSL) i ma kilka schludnych, nowoczesnych funkcji, np. Oparty na Eigen, obsługę wielu precyzji.
źródło