我已经将一些旧的Fortran代码转换为C ++,并且我遇到了一些绑定。有一节涉及cernlib函数DGMLT,高斯积分多重积分,定义在https://docs.angularjs.org/api/ng/directive/ngStyle
我已经在线搜索,但我无法在http://hep.fi.infn.it/cernlib.pdf中找到合适的方法来复制此过程。我发现的多个集成函数的几个例子(ROOT::Math::AdaptiveIntegratorMultiDim()
等)没有任何代码示例。
基本上,我需要一些示例代码用于多重集成,可能使用ROOT。
答案 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
。