Eu tenho minha própria pequena sub-rotina para integração numérica (quadratura), que é uma adaptação em C ++ de um programa ALGOL publicado por Bulirsch & Stoer em 1967 (Numerische Mathematik, 9, 271-278).
Gostaria de atualizar para um algoritmo (adaptável) mais moderno e me pergunto se existem bibliotecas C ++ (gratuitas) que as fornecem. Eu olhei como GSL (que é C), mas isso vem com uma API horrível (embora os números possam ser bons). Mais alguma coisa?
Uma API útil seria assim:
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
fonte
fonte
gsl_function
é um ponteiro de função junto com algum ponteiro de dados opaco, que pode conter seu estado. Segundo, existem algumas preocupações de eficiência quanto à (re) alocação de buffers de trabalho arbitrariamente grandes, para que parte tenha pelo menos alguma justificativa válida.Respostas:
Dê uma olhada no Odeint . Agora faz parte do Boost e inclui o algoritmo Bulirsch-Stoer, entre outros. Para começar, você pode ver aqui um exemplo muito simples.
fonte
O MFEM [1] possui funções de quadratura fáceis de usar (para elementos surfacicos e volumétricos). Conseguimos usá-los para várias tarefas.
[1] http://mfem.org/
fonte
É possível escrever facilmente um invólucro fino em C ++ nas funções de quadratura GSL. O seguinte precisa do C ++ 11.
Resultado
fonte
Eu tive sucesso com a biblioteca Cubature (ela está escrita em C). Destina-se à integração multidimensional com um número relativamente baixo de dimensões.
A biblioteca HIntLib é escrita em C ++ e possui rotinas para quadratura adaptativa (cubatura).
fonte
Confira https://github.com/tbs1980/NumericalIntegration . Ele é baseado no QUADPACK (no qual o GSL também se baseia) e possui alguns recursos modernos, por exemplo, baseados no Eigen, suporte a multiprecisões.
fonte