【问题标题】:lmfit fits 'wrong' peak in data with multiple peakslmfit 适合具有多个峰值的数据中的“错误”峰值
【发布时间】:2020-10-20 07:22:52
【问题描述】:

使用此代码(在 sn-p 之前我只是读入数据,效果很好,在 sn-p 之后我只是做标签等)

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 行,那么“fit”就会随处变为零。

【问题讨论】:

  • 尝试限制拟合范围,或者您可以考虑两个可能适合两个峰值的高斯叠加。由一个单一的钟形曲线组成的模型只是不适合您肉眼所见的数据。

标签: python gaussian lmfit


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2016-10-01
    • 1970-01-01
    • 2019-02-14
    • 2023-03-06
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多