我正在尝试最小化 ROOT 中的卡方函数,这是 FCN 代码:
void myFCNres( int &npar , double * gin , double &f , double * par , int flag ) {
double chi2 = 0;
for ( int i = 1 ; i <= datasetNHres->GetSize()-2 ; ++i ) {
par[7] = Emin + (Emax-Emin)/(2*N_div) + (i-1)*(Emax-Emin)/N_div;
chi2 += pow( ( integrand->Integral( 1.804 , 8 , par , 1E-15) - datasetNHres->GetBinContent(i)) / datasetNHres->GetBinError(i) ,2);
}
chi2 += pow( (par[0] - p[0]) / sig[0] ,2) +
pow( (par[1] - p[1]) / sig[1] ,2) +
pow( (par[2] - p[2]) / sig[2] ,2) +
pow( (par[3] + p[3]) / sig[3] ,2);
f = chi2;
}
运行的结果是参数都没有改变,就像我的函数不依赖任何一个一样。您是否看到 FCN 逻辑有问题,或者我必须在其他地方寻找错误?
谢谢,路易吉