问题描述
我通常在C ++环境中使用ROOT及其强大的MINUIT插值类。出于与绘图和简化数据处理有关的原因,我最近切换到了Python 3.8。问题是我找不到允许我设置自定义插值函数的库(现在是1D,将来是多变量)! Scipy
和Pandas
预设了methods
,但我不知道其他用于插值的库。在我看来,这是完全不可能的,因此我要问你!
我需要复制的东西在ROOT中听起来像这样:
插值功能的定义
TF1* f3 = new TF1("PECD6","([0]*x + 0.5*[2]*(5*x*x*x-3*x) +0.125*[4]*(63*x*x*x*x*x-70*x*x*x+15*x)) / (1 + 0.5*[1]*(3*x*x-1) + 0.125*[3]*(35*x*x*x*x-30*x*x+3) + 0.0625*[5]*(231*x*x*x*x*x*x-315*x*x*x*x+105*x*x-5)) +1",-0.9,0.9);
f3->SetParameters(0,0);
f3->SetParLimits(0,-1,1);
f3->SetParLimits(1,1);
f3->SetParLimits(2,1);
f3->SetParLimits(3,1);
f3->SetParLimits(4,1);
f3->SetParLimits(5,1);
f3->SetParNames("b1","b2","b3","b4","b5","b6");
如您所见,我正在使用勒让德多项式直到6阶,我想接收系数,可能伴随误差的传播。
功能的使用
ratio_genarray[rcounter]->Fit("PECD6","QR");
fit1[k] = ratio_genarray[rcounter]->GetFunction("PECD6");
有人有建议吗?
谢谢!
解决方法
我建议使用iminuit。您需要将C ++语法重新排列为iminuit的Python语法,但是从那以后,这是最小的更改,因为它是 MINUIT。
(LMFIT看起来也很有前途,但由于您已经在使用MINUIT,因此向iminuit的过渡会更加顺畅。)