Scipy Curve_fit. Separate bounds for multiple parameters

2024-10-01 02:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Scipy将我的数据调整为函数。函数给出了两个参数的值,在本例中,ab。我想使用bound参数来限制这些参数可以接受的值,每个参数都有自己的可接受值范围。在

可接受值:15<;a<;50和0.05<;b<;0.2

我想知道如何实现它们。官方文档只显示了如何对1个参数执行这些操作。这个问题类似于:Python curve fit library that allows me to assign bounds to parameters。它也只处理1个参数的边界。在

以下是我尝试的:

def Ebfit(x,a,b):
    Eb_mean = a*(0.0256/kt)                         # Eb at bake temperature
    Eb_sigma = b*Eb_mean
    Foursigma =  4*Eb_sigma
    Eb_a = np.linspace(Eb_mean-Foursigma,Eb_mean+Foursigma,N_Device)
    dEb = Eb_a[1] - Eb_a[0]
    pdfEb_a = spys.norm.pdf(Eb_a,Eb_mean,Eb_sigma)

    ## Retention Time

    DMom = np.zeros(len(x),float)
    tau = (1/f0)*np.exp(Eb_a)
    for bb in range(len(x)):
        DMom[bb]= (1 - 2*(sum(pdfEb_a*(1 - np.exp(np.divide(-x[bb],tau))))*dEb))
    return DMom

time = datafile['time'][0:501]
Moment = datafile['25Oe'][0:501]

params,extras = curve_fit(Ebfit,time,Moment, p0=[20,0.1], bounds=[(15,50),(0.05,0.2)])

我还尝试了以下变体,以确定括号是否是问题所在:

^{pr2}$

但是对于所有这些变化我都得到了同样的错误

ValueError: Each lower bound mush be strictly less than each upper bound.

它只适用于单个绑定,例如:

params,extras = curve_fit(Ebfit,time,Moment, p0=[20,0.1], bounds=[0,50])

感谢任何帮助。 谢谢您!在


Tags: lt参数timenpmeansigmafitcurve
2条回答

bounds=[[0,50],[0,0.3]])表示第二个参数大于50但小于0.3。第一个参数也固定为零。在

格式为bounds=(lower,upper)。在

根据@ev br建议。我尝试了边界参数的以下更改,结果很好。在

bounds=[[15,0.02],[50,0.2]]

所以最后,论点应该是:

^{pr2}$

式中,a1a的下限,a2a的上限。Sames喜欢b。在

相关问题 更多 >