如果将值更改xlist为numpy数组,它将起作用:
In [38]: popt, pcov = curve_fit(func, array(xlist, dtype=float), ylist)
In [39]: popt
Out[39]: array([ 7.83722896e-03, -3.94023294e-05])
乍一看,这似乎是一个错误,但实际情况是底层代码接受了参数xdata
并将其原样传递给函数。在您的示例中,这意味着在表达式中a + b*x
,x
是一个python列表。 这意味着b*x
没有进行所需的计算。
因此,要使您的func工作定义正确,该参数xdata必须是一个numpy
数组。或者,您可以这样定义func:
def func(x, a, b):
return a + b*np.asarray(x)