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