- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找到并复制了此代码以从 Finding the full width half maximum of a peak 获取 FWHM (倒数第二个答案)。我下面的代码使用我自己的数据。生成的图看起来错误,因为我的数据在一侧出现困惑,而绿色框在另一侧。必须更改哪些内容才能看到数据的高斯分布?
import numpy as np, scipy.optimize as opt
from pylab import *
def gauss(x, p):
return 1.0/(p[1]*np.sqrt(2*np.pi))*np.exp(-(x-p[0])**2/(2*p[1]**2))
x = [6711.19873047, 6712.74267578, 6714.28710938, 6715.83544922, \
6717.38037109, 6718.92919922, 6720.47509766, 6722.02490234, \
6723.57128906, 6725.11767578, 6726.66845703, 6728.21630859, \
6729.76757812, 6731.31591797, 6732.86816406, 6734.41699219, \
6735.96630859, 6737.51953125, 6739.06933594, 6740.62353516, \
6742.17431641, 6743.72900391]
y = [20.86093712, 23.60984612, 23.079916, 18.17703056, 18.24843597, \
16.70049095, 19.48906136, 16.7509613, 19.09896088, 32.03007889, \
54.56513977, 58.76417542, 40.93075562, 24.77710915, 17.68757629, \
17.60736847, 18.89552498, 17.84486008, 17.49455452, 18.29696465, \
18.55847931, 19.26465797]
# Fit a guassian
p0 = [0,70]
errfunc = lambda p, x, y: gauss(x, p) - y # Distance to the target function
p1, success = opt.leastsq(errfunc, p0[:], args=(x, y))
fit_mu, fit_stdev = p1
FWHM = 2*np.sqrt(2*np.log(2))*fit_stdev
print "FWHM", FWHM
plot(x,y)
plot(x, gauss(x,p1),lw=3,alpha=.5, color='r')
axvspan(fit_mu-FWHM/2, fit_mu+FWHM/2, facecolor='g', alpha=0.5)
show()
最佳答案
看起来您传递给 scipy.optimize.leastsq()
的最初猜测 p0
就是这里的问题。如果它不够接近(例如不在数据范围内),那么返回的解决方案将没有多大意义。
要获得合理的输出,您可以初始化 p0 = [6730,70]
,这将产生以下绘图:
但这仍然不是正确的答案,因为您已经跳过 original answer 中存在的 PDF 标准化步骤。 。这是适用于您的代码的标准化片段(在适合高斯之前添加它):
# Renormalize to a proper PDF
y /= ((max(x) - min(x)) / len(x)) * np.sum(y)
添加它会产生以下绘图:
高斯拟合不是很紧密,但至少它有一个合理的平均值和标准差,正如我最初在下面描述的那样。
<小时/>问题源于最小二乘函数 p1
的输出,它与 p0
相同。
换句话说,鉴于所得平均值为 0
而不是 np.mean(x) = 6727.45
,该 block 将绘制在完全不同的位置。此外, block 的宽度根据 70
标准差绘制为 329.67
,而不是基于 np 的
.46.28
.std(x) = 9.83
关于python - 我的绘图和 FWHM 计算出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402787/
我找到并复制了此代码以从 Finding the full width half maximum of a peak 获取 FWHM (倒数第二个答案)。我下面的代码使用我自己的数据。生成的图看起来错
我在尝试查找某些数据的 FWHM 时遇到问题。我最初尝试使用 interpolate.interp1d 拟合曲线。有了这个,我能够创建一个函数,当我输入一个 x 值时,它会返回一个内插的 y 值。问题
我是一名优秀的程序员,十分优秀!