Saya memiliki subrutin kecil saya sendiri untuk integrasi numerik (quadrature), yang merupakan adaptasi C ++ dari program ALGOL yang diterbitkan oleh Bulirsch & Stoer pada tahun 1967 (Numerische Mathematik, 9, 271-278).
Saya ingin meningkatkan ke algoritma yang lebih modern (adaptif) dan bertanya-tanya apakah ada perpustakaan C ++ (gratis) yang menyediakannya. Saya telah melihat sebagai GSL (yang merupakan C), tetapi itu datang dengan API yang mengerikan (meskipun angka mungkin baik). Apakah ada hal lain?
API yang bermanfaat akan terlihat seperti ini:
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
sumber
sumber
gsl_function
adalah fungsi pointer bersama dengan beberapa data pointer buram, yang dapat berisi keadaan Anda. Kedua, ada beberapa kekhawatiran efisiensi tentang (re-) mengalokasikan buffer kerja sewenang-wenang besar, sehingga bagian memiliki setidaknya beberapa pembenaran yang valid untuk itu.Jawaban:
Lihatlah Odeint . Sekarang bagian dari Boost dan termasuk algoritma Bulirsch-Stoer. Untuk memulai, Anda dapat melihat di sini contoh yang sangat sederhana.
sumber
MFEM [1] memiliki fungsi quadrature yang mudah digunakan (baik untuk elemen permukaan dan volumetrik). Kami dapat menggunakannya untuk berbagai tugas.
[1] http://mfem.org/
sumber
Anda dapat dengan mudah menulis bungkus C ++ tipis di sekitar fungsi quadrature GSL. Kebutuhan berikut C ++ 11.
Keluaran
sumber
Saya telah sukses dengan perpustakaan Cubature (ditulis dalam C, meskipun). Ini ditujukan untuk integrasi multidimensi dengan jumlah dimensi yang relatif rendah.
The HIntLib perpustakaan ditulis dalam C ++ dan memiliki rutinitas untuk kuadratur adaptif (cubature).
sumber
Lihat https://github.com/tbs1980/NumericalIntegration . Ini didasarkan pada QUADPACK (yang juga berdasarkan GSL), dan memiliki beberapa fitur modern yang rapi, misalnya berdasarkan Eigen, dukungan multiprecision.
sumber