Math boost上n维函数的有效积分

Math boost上n维函数的有效积分,math,boost,Math,Boost,我可以在boost上积分n维函数吗? 我编写了以下代码 using boost::math::quadrature::trapezoidal; return trapezoidal( [&](double x) { return trapezoidal([&](double y) { return f(x, y); }, b1, e1); }, b0, e0); 当然,这段代码要比能够集成ND函数的Python慢得多。 是否有更有效的实施方案

我可以在boost上积分n维函数吗?
我编写了以下代码

using boost::math::quadrature::trapezoidal;
return trapezoidal(
  [&](double x) { 
    return trapezoidal([&](double y) {
      return f(x, y); }, b1, e1);
    }, b0, e0);
当然,这段代码要比能够集成ND函数的Python慢得多。
是否有更有效的实施方案

谢谢


编辑:我想整合2或3维,相对低维。比如f(x,y)=sin(x)*sin(y)。

我猜你指的是n维。(无论如何,把它说清楚是件好事。)你已经有了一个良好的开端。至少有三条路要走

(1) 将梯形规则替换为更有效的一维规则,如高斯积分或高斯-克朗罗德。GK由quadpack库实现,该库可能包含在Boost或其他库中

(2) 查找专门为多个维度派生的规则。网络搜索可能会找到一些东西

(3) 尝试基于采样的方法,而不是求积方法(本质上是多项式近似积分)。看看蒙特卡罗方法和准蒙特卡罗。准蒙特卡罗是一种有趣的方法——它基于低差异序列。同样,网络搜索会找到一些资源


祝你好运,玩得开心。

我猜你指的是n维空间。(无论如何,把它说清楚是件好事。)你已经有了一个良好的开端。至少有三条路要走

(1) 将梯形规则替换为更有效的一维规则,如高斯积分或高斯-克朗罗德。GK由quadpack库实现,该库可能包含在Boost或其他库中

(2) 查找专门为多个维度派生的规则。网络搜索可能会找到一些东西

(3) 尝试基于采样的方法,而不是求积方法(本质上是多项式近似积分)。看看蒙特卡罗方法和准蒙特卡罗。准蒙特卡罗是一种有趣的方法——它基于低差异序列。同样,网络搜索会找到一些资源


祝你好运,玩得开心。

除了蒙特卡罗,Boost没有多变量求积,这在2d中是多余的。事情进展缓慢的原因是梯形求积只对周期被积函数有效。根据您的投诉,我认为
f
x
y
中都不是周期性的。把
tanh_sinh
换成
梯形
,事情应该会好一些


请注意,在您的特定示例中,
f(x,y)=sin(x)*sin(y)
,被积函数是可分离的,因此不需要使用多元求积;您可以使用1d正交的乘积。(我不想吹毛求疵,因为我认为你的例子不应该太直截了当,但尽管如此,如果你能使用它,这是一个重要的优化。)

Boost没有多元求积,除了蒙特卡罗,这在2d中是多余的。事情进展缓慢的原因是梯形求积只对周期被积函数有效。根据您的投诉,我认为
f
x
y
中都不是周期性的。把
tanh_sinh
换成
梯形
,事情应该会好一些


请注意,在您的特定示例中,
f(x,y)=sin(x)*sin(y)
,被积函数是可分离的,因此不需要使用多元求积;您可以使用1d正交的乘积。(我不想吹毛求疵,因为我想你的例子不应该太直截了当,但是,如果你能使用它,这是一个重要的优化。)

谢谢。是的,boost还有其他[正交][1]。我的问题是,我想像scipy.integratedon boost一样。也许scipy不做样品。[1] :谢谢。是的,boost还有其他[正交][1]。我的问题是,我想像scipy.integratedon boost一样。也许scipy不做样品。[1]: