lmfit使具有多个峰的数据适合“错误”峰

问题描述

使用此代码(在代码段之前,我刚刚读入数据,效果很好,在代码段之后,我只做了标签等)

plt.errorbar(xdata,ydata,yerr,fmt='.',label='Data')

model = models.GaussianModel()
params = model.make_params()

params['center'].set(6.5)
#params['center'].vary = False

fit = model.fit(ydata,params=params,x=xdata,weights=1/yerr)
print(fit.fit_report())

plt.plot(xdata,fit.best_fit,label='Fit')

我尝试拟合最后一个峰(大约在x = 6.5)。但是正如您在图片中看到的那样,代码并没有做到这一点。谁能告诉我为什么吗?

enter image description here

编辑:如果我运行params['center'].vary = False行,则“ fit”在任何地方都将变为零。

解决方法

我从没使用过lmfit,但是问题很可能是您试图适应整个数据区域。考虑到您传递给.fit调用的整个数据区域,结果拟合可能是最佳和正确的。
您应该尝试仅将相关数据传递给拟合。在您的情况下,xdata只能是大约5.5到7.5(或这些数字附近的某个地方)的数据点集。当然,ydata也必须适应这些值。这样的配合应该可以很好地工作。

相关问答

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