【问题标题】:peak fitting lmfit nan outcome峰值拟合 lmfit nan 结果
【发布时间】:2023-04-06 21:12:01
【问题描述】:

尝试将峰值拟合到这样的一些数据中:

import scipy
from lmfit.models import GaussianModel
x = shm.PTR_P
y = shm.PORE_V_P
mod = LorentzianModel()

pars = mod.guess(y, x=x)
out  = mod.fit(y, pars, x=x)
print(out.fit_report(min_correl=0.25))

虽然我可以在生成数据时进行拟合,但如果我尝试从其他来源读取它们,则它不起作用。我不太擅长这一点,也不知道问题是什么。这是输出:

[x,y] [(34.145490000000002, 3.4599999999999999e-08), (29.286449999999999, 4.8399999999999997e-08), (25.118860000000002, 0.026773140000000001), (21.544350000000001, 0.068791409999999997), (18.4785, 0.083200979999999994), (15.848929999999999, 0.02123179), (11.659139999999999, 0.01551077), (10.0, 0.084493879999999993), (6.3095739999999996, 2.0899999999999998e-07), (5.4116949999999999, 0.045209140000000002), (4.6415889999999997, 0.054789360000000002), (3.4145489999999996, 8.9399999999999993e-08), (2.9286449999999999, 0.01100814), (2.5118860000000001, 0.088990659999999999), (1.84785, 3.5799999999999995e-07), (1.5848930000000001, 0.099999009999999999), (1.359356, 0.075139280000000003), (1.1659139999999999, 0.167379), (1.0, 0.57693050000000001), (0.85769590000000007, 1.8658159999999999), (0.73564230000000008, 8.4961369999999992), (0.6309574, 25.299099999999999), (0.54116949999999997, 21.413350000000001), (0.46415889999999999, 13.408829999999998), (0.39810719999999999, 8.3584750000000003), (0.34145490000000006, 5.3982010000000002), (0.29286440000000002, 3.7518540000000002), (0.25118859999999998, 2.5325389999999999), (0.21544349999999998, 1.7722470000000001), (0.18478499999999998, 1.445808), (0.15848929999999997, 1.182083), (0.13593559999999999, 0.94957730000000007), (0.1165914, 0.67620849999999999), (0.10000000000000001, 0.46631620000000001), (0.085769590000000007, 0.41001890000000002), (0.07356422, 0.30625920000000001), (0.063095730000000003, 0.24040219999999998), (0.054116949999999997, 0.1942596), (0.046415890000000001, 0.11306760000000002), (0.039810720000000001, 0.099998470000000006), (0.034145490000000001, 0.099998470000000006), (0.029286449999999999, 0.02246857), (0.025118870000000001, 0.077529909999999994)]

【问题讨论】:

  • 通常当您尝试拟合的数据与您的分布相距太远时,您会得到 NAN 或 INF。也许尝试另一个(或修改你的,使你的高斯与你的比例成正比)。还要检查nan_to_num() 函数;当我无法摆脱 NAN 和 INF 时,它曾经帮助过我
  • 你确定这是输出吗?合适的报告不应该是这样的,而且我看不到任何 NaN。
  • 嗨,我也试过了,但没有成功...但我认为问题出在数据格式上...
  • 这里是一个输出示例 "[[Model]] Model(lorentzian) [[Fit Statistics]] # function evals = 8003 # data points = 43 # variables = 3 chi-square = nan reduce chi -square = nan Akaike info crit = nan Bayesian info crit = nan [[Variables]] sigma: nan +/- nan (nan%) (init= 0) center: nan +/- nan (nan%) (init= 0.5454286 ) 幅度:nan +/- nan (nan%) (init=-5.274815) fwhm: nan +/- 0 (nan%) == '2.0000000*sigma'
  • 我确实通过修复参数范围使其工作:gauss1 = GaussianModel(prefix='g1_') pars.update( gauss1.make_params()) pars['g1_center'].set(-1 , min= -3, max=1) pars['g1_sigma'].set(0.4, min=0.03) pars['g1_amplitude'].set(2, min=1)

标签: python-2.7 lmfit


【解决方案1】:

我猜你的数据中要么有 NaN,要么最初的猜测离产生 NaN 太远了。 sigma 的初始猜测为 0 似乎很可疑——这应该 > 0。 无论哪种方式,绘制数据并使用np.isnan() 可能有助于隔离问题。

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2020-06-07
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多