首页 > 解决方案 > 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 处)。但正如您在图片中看到的那样,代码并没有这样做。谁能告诉我这是为什么?

在此处输入图像描述

编辑:如果我运行这条线params['center'].vary = False,“适合”在任何地方都会变为零。

标签: pythongaussianlmfit

解决方案


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


推荐阅读