您错误地调用了curve_fit,下面是用法curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, **kw)f是您的函数,它的第一个参数是一组自变量,其后续参数是函数参数(如振幅、中心等)
扩展数据是自变量
ydata是依赖变量
p0是对函数参数的初始猜测(对于Guassian,这是振幅、宽度和中心)
默认情况下,p0被设置为一个1的列表[1,1,…],这可能就是为什么您得到的结果是,fit永远不会执行,因为您调用不正确。在
尝试从数据中估计振幅、中心和宽度,然后制作一个p0对象(详见下文)
^{pr2}$
下面是一个简短的例子xdata = np.linspace(0, 4, 50)
mygauss = ( 10,2,0.5) #( amp, center, width)
y = func(xdata, *mygauss ) # using your func defined above
ydata = y + 2*(np.random.random(50)- 0.5) # add some noise to create fake data
现在我能猜出合适的参数了ai = np.max( ydata) # guess the amplitude
xi = xdata[ np.argmax( ydata)] # guess the position of center
猜测宽度是很棘手的,我首先会找到半最大值的位置(有两个,但您只需要找到一个,因为高斯是对称的):