1

我正在尝试使用 lmfit 拟合我的部分数据(应该看起来像Gaussian),但我得到了一条线。请参见下图。

数据绘图:

在此处输入图像描述

我尝试过的代码如下:

import matplotlib.pyplot as plt
from numpy import sqrt, pi, exp, linspace, loadtxt
from lmfit import Model


def gaussian(x, amp, cen, wid):
    "1-d gaussian: gaussian(x, amp, cen, wid)"
    return (amp/(sqrt(2*pi)*wid)) * exp(-(x-cen)**2 /(2*wid**2))

gmodel = Model(gaussian)
result = gmodel.fit(n[83:93], x=bins[84:94], amp=2, cen=5, wid=3)

print result.fit_report()

ax = plt.subplot(212)
ax.set_yscale("log", nonposx='clip')


plt.plot(bins[1:len(bins)], n, 'r*')
plt.plot(bins[84:94], result.init_fit, 'r')

plt.grid()
plt.ylabel("Counts")
plt.xlabel("Peak Voltage [V]")
plt.show()

遵循我正在使用的数据系列

垃圾箱

array([ 0.381058  ,  0.41177682,  0.44249564,  0.47321446,  0.50393328,
    0.5346521 ,  0.56537092,  0.59608974,  0.62680856,  0.65752738,
    0.6882462 ,  0.71896502,  0.74968384,  0.78040266,  0.81112148,
    0.8418403 ,  0.87255912,  0.90327794,  0.93399676,  0.96471558,
    0.9954344 ,  1.02615322,  1.05687204,  1.08759086,  1.11830968,
    1.1490285 ,  1.17974732,  1.21046614,  1.24118496,  1.27190378,
    1.3026226 ,  1.33334142,  1.36406024,  1.39477906,  1.42549788,
    1.4562167 ,  1.48693552,  1.51765434,  1.54837316,  1.57909198,
    1.6098108 ,  1.64052962,  1.67124844,  1.70196726,  1.73268608,
    1.7634049 ,  1.79412372,  1.82484254,  1.85556136,  1.88628018,
    1.916999  ,  1.94771782,  1.97843664,  2.00915546,  2.03987428,
    2.0705931 ,  2.10131192,  2.13203074,  2.16274956,  2.19346838,
    2.2241872 ,  2.25490602,  2.28562484,  2.31634366,  2.34706248,
    2.3777813 ,  2.40850012,  2.43921894,  2.46993776,  2.50065658,
    2.5313754 ,  2.56209422,  2.59281304,  2.62353186,  2.65425068,
    2.6849695 ,  2.71568832,  2.74640714,  2.77712596,  2.80784478,
    2.8385636 ,  2.86928242,  2.90000124,  2.93072006,  2.96143888,
    2.9921577 ,  3.02287652,  3.05359534,  3.08431416,  3.11503298,
    3.1457518 ,  3.17647062,  3.20718944,  3.23790826,  3.26862708,
    3.2993459 ,  3.33006472,  3.36078354,  3.39150236,  3.42222118,
    3.45294   ])

array([  33.,  173.,  178.,  187.,  212.,  196.,  194.,  218.,  213.,
    191.,  189.,  236.,  115.,  196.,  211.,  182.,  163.,  161.,
    125.,  123.,  116.,  133.,  104.,  120.,   68.,  138.,   91.,
     81.,   92.,   76.,   89.,   84.,   96.,   86.,   71.,   69.,
     78.,   48.,   84.,   76.,   75.,   99.,   73.,   64.,   93.,
     67.,   92.,   85.,  101.,   38.,   88.,   65.,   54.,   76.,
     63.,   51.,   78.,   81.,   67.,   50.,   79.,   63.,   24.,
     50.,   68.,   58.,   62.,   72.,   53.,   65.,   42.,   54.,
     60.,   79.,   34.,   58.,   53.,   57.,   73.,  102.,   98.,
    116.,  136.,  147.,  107.,  106.,  124.,   47.,   91.,   52.,
     42.,   16.,    4.,    7.,    7.,    6.,   18.,   44.,  853.,  216.])

我试图改变高斯模型但没有成功。也尝试了其他库。关于正在发生的事情有什么想法吗?

4

1 回答 1

2

我不熟悉包 lmfit,但从文档中我认为你不应该result.init_fit在你的情节中使用,但是result.best_fit.

从文档中:

result.init_fitnumpy.ndarray 模型函数的结果,在提供的自变量和初始参数处进行评估。

result.best_fit 模型函数的 numpy.ndarray 结果,在提供的自变量和最佳拟合参数处进行评估。

于 2018-02-04T19:32:45.727 回答