【问题标题】:Scipy Curve_fit. Separate bounds for multiple parametersScipy Curve_fit。多个参数的单独界限
【发布时间】:2017-04-08 07:05:56
【问题描述】:

我正在使用 Scipy 将我的数据拟合到一个函数中。该函数为我提供了 2 个参数的值,在本例中为 ab。我想使用绑定参数来限制这些参数可以采用的值,每个参数都有自己的可接受值范围。

可接受的值:15

我想知道如何实现它们。官方文档仅显示了如何为 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)])

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

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

但是对于所有这些变体,我都会遇到相同的错误

ValueError: 每个下限必须严格小于每个上限 绑定。

它仅适用于单个边界,例如:

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

感谢任何帮助。 谢谢!

【问题讨论】:

  • curve_fit.bounds 文档有哪些不清楚的地方,您不了解如何执行此操作?请注意,文档中提到了“2-tuple of array_like”,因此您可能需要将这些内部列表更改为元组。
  • @Evert 嘿,是的,我也试过了。我仍然不断收到同样的错误。我已编辑问题以包含我尝试过的内容。

标签: python python-3.x scipy curve-fitting boundary


【解决方案1】:

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

格式为 bounds=(lower, upper)。

【讨论】:

  • 啊,我明白你的意思了。所以应该是:bounds=[[15,0.05],[50,0.2]]
【解决方案2】:

根据@ev-br 的建议。我对 bounds 参数尝试了以下更改,效果很好。

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

所以最后,参数give应该如下:

 bounds=[[a1,b1],[a2,b2]]

其中a1a的下限,a2a的上限。 b 也一样。

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 2018-02-03
    • 2013-10-12
    • 1970-01-01
    • 2017-10-29
    • 2017-10-08
    • 2021-12-30
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多