2015-11-18 37 views
0

我一直在將一些舊的Fortran代碼轉換爲C++,並且我遇到了一些綁定。有一部分涉及cernlib函數DGMLT,高斯積分用於多積分,其定義如下:http://hep.fi.infn.it/cernlib.pdfCERN ROOT庫中的多種集成方法

我一直在線搜索,我無法在ROOT中找到合適的方法來複制此過程。我發現的幾個集成函數的例子(ROOT::Math::AdaptiveIntegratorMultiDim()之類)沒有任何代碼示例。

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

+0

你想要代碼示例*爲您找到的功能*,或者你想*不同*功能?我不知道cernlib,ROOT,或涉及的大部分數學知識,但我發現ROOT庫API有很好的文檔記錄...?!? – DevSolar

回答

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