CERN ROOT 库中的多种集成方法

Multiple Integration methods in CERN ROOT library

我一直在将一些旧的 Fortran 代码转换为 C++,我 运行 遇到了一些困难。有一个部分涉及 cernlib 函数 DGMLT,多重积分的高斯正交,定义在 http://hep.fi.infn.it/cernlib.pdf

我一直在网上搜索,在ROOT中找不到合适的方法来复制这个过程。我找到的多个集成函数的几个示例(ROOT::Math::AdaptiveIntegratorMultiDim() 等)没有任何代码示例。

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

下面是使用 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;
}

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