自定义插值/最小化功能也称为曲线拟合任何库

问题描述

我通常在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);
    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的过渡会更加顺畅。)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...