我正在尝试使用 Python 中的 scipy 和最小二乘法学习高斯拟合。
我还有一个问题与此问题的答案有关 How to fit a double Gaussian distribution in Python?,
从答案的代码中,我如何估计参数c1, mu1, sigma1, c2, mu2, sigma2
在
params = [c1, mu1, sigma1, c2, mu2, sigma2]
,因为我想使用 leastsq
?
答案 0 :(得分:0)
希望这个答案不会太晚.. 有一种简单的方法可以实际估计这些参数。
这就是我在自己的代码中对光谱进行高斯拟合的方法:
#Détermination des paramètres initiaux
mu0, m = xdata[roiDeb], ydata[roiDeb]
for j in range(roiDeb+1, roiFin+1) :
if ydata[j] > m:
mu0 = xdata[j]
m = ydata[j]
h0 = m
fwhmd, fwhmf, sigma0 = ydata[roiDeb], ydata[roiFin+1], 0
for j in range(roiDeb, mu0+1) :
if ydata[j] > h0/2 :
fwhmd = j
break
for j in range(mu0, roiFin+1) :
if ydata[j] < h0/2 :
fwhmf = j
break
sigma0 = (fwhmf-fwhmd)/2.355
要确定质心,您只需执行 if 条件并检查您感兴趣区域中的较高 y 值。
然后您可以计算两侧的半高宽 (FWHM)。
完成公式:sigma = FWHM / 2.355 可以简单演示(或者可以在网上找到)
我让你自己发现如何使用这些值进行高斯拟合...