CERN ROOT库中的多种集成方法

时间:2015-11-18 12:31:57

标签: c++ root-framework

我已经将一些旧的Fortran代码转换为C ++,并且我遇到了一些绑定。有一节涉及cernlib函数DGMLT,高斯积分多重积分,定义在https://docs.angularjs.org/api/ng/directive/ngStyle

我已经在线搜索,但我无法在http://hep.fi.infn.it/cernlib.pdf中找到合适的方法来复制此过程。我发现的多个集成函数的几个例子(ROOT::Math::AdaptiveIntegratorMultiDim()等)没有任何代码示例。

基本上,我需要一些示例代码用于多重集成,可能使用ROOT。

1 个答案:

答案 0 :(得分:0)

以下是使用AdaptiveIntegratorMultiDim::Integral的代码段 计算具有维数的多维高斯积分 2--15:

for(unsigned int dim=2; dim<kMaxSyst; ++dim){
    NdimNormal nDimNormal(dim);
    ROOT::Math::Functor func(nDimNormal,dim);
    ROOT::Math::IntegratorMultiDim im(func);
    volNom = im.Integral(xminNom, xmaxNom);
    volSys = im.Integral(xminSys, xmaxSys);
    cout<<"dim = "<<dim
        <<" : volNom = "<<volNom
        <<" , volSys = "<<volSys
        <<endl;
}

NdimNormal是一个N维函数对象, 请在此处的完整代码中查看其定义:gist link。 请注意AdaptiveIntegratorMultiDim::Integral只能处理 尺寸在1到16之间的积分。对于更高的尺寸,您可能需要考虑gsl