自定义插值/最小化函数(也称为曲线拟合)任何库



我通常在C++环境中使用ROOT及其强大的MINUIT插值类。出于绘图和数据处理方便的原因,我最近切换到了Python 3.8。问题是,我找不到一个允许我设置自定义插值函数的库(现在是1D,将来是多元的(!ScipyPandas已经预设了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, 0, 0, 0, 0);
f3->SetParLimits(0, -1, 1);
f3->SetParLimits(1, -1, 1);
f3->SetParLimits(2, -1, 1);
f3->SetParLimits(3, -1, 1);
f3->SetParLimits(4, -1, 1);
f3->SetParLimits(5, -1, 1);
f3->SetParNames("b1", "b2", "b3", "b4", "b5", "b6");

正如你所看到的,我使用的是六阶勒让德多项式,我想接收系数,可能有误差的传播。

功能的使用

ratio_genarray[rcounter]->Fit("PECD6", "QR");
fit1[k] = ratio_genarray[rcounter]->GetFunction("PECD6");

有人有什么建议吗?

谢谢!

我建议使用亚胺uit。您需要将C++语法重新排列为imiuit的Python语法,但从那时起,这是一个最小的更改,因为它MINUIT。

(LMFIT看起来也很有前景,但由于您已经在使用MINIT,它将更顺利地过渡到亚胺uit。(

最新更新