我一直在学习将Boost库的数值求积用于Cpp。在文档中,我找到了一个使用Boost的1D Gauss-Kronrod Quadrature示例。
#include <boost/math/quadrature/gauss_kronrod.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace boost::math::quadrature;
auto f1 = [](double t) { return std::exp(-t*t / 2); };
double error;
double Q = gauss_kronrod<double, 61>::integrate(f1, 0, std::numeric_limits<double>::infinity(), 5, 1e-14, &error);
std::cout << Q << " " << error<<std::endl;
return 0;
}
这计算积分
最大公差1e-14和最大深度5。我正在尝试以此为基础并计算这样的双积分(容积)
我一直在尝试使用两个一维积分来计算这个双积分。我试图查找是否有任何双重积分功能,但没有找到,所以这是我迄今为止尝试过的
#include <boost/math/quadrature/gauss_kronrod.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace boost::math::quadrature;
auto f1 = [](double t, double s) { return std::exp(-(t*t+s*s+t*s) / 2); };
double error;
double Q = gauss_kronrod<double, 15>::integrate(gauss_kronrod<double, 61>::integrate(f1, 0, std::numeric_limits<double>::infinity(), 5), 0, std::numeric_limits<double>::infinity(), 5, 1e-9, &error);
std::cout << Q << " " << error<<std::endl;
return 0;
}
在这里,我介绍了 2 个变量的积分。两个一维正交函数是嵌套的。但这会产生编译错误。 我做错了什么,还有其他更简洁的方法来进行二维数值积分吗?