CERN ROOT库中的多种集成方法

Multiple Integration methods in CERN ROOT library

本文关键字:集成 方法 ROOT CERN      更新时间:2023-10-16

我一直在将一些旧的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;
}

类CCD_ 3是N维函数对象,请参阅完整代码中的定义:gist链接。注意,AdaptiveIntegratorMultiDim::Integral只能处理维数在1和16之间的积分。对于更高的维度,您可能需要考虑gsl