我有两个阵列。一个是E,它是0-21的整数数组。第二个是E_Dist,显示E Array的每个索引的元素数。 E_Dist的最小值和最大值为0-450000。
我想绘制E_Dist与E的关系,即E在水平方向,E_Dist在垂直方向,并在此图中拟合高斯函数。 不幸的是,我尝试了多少我无法适应高斯函数。我实际上有一些问题:
1-我怎样才能正确猜出高斯函数的中心。我可以简单地使用E的平均值,即10,但实际上我的高斯情节峰值约为5.我试图使用一些公式如
E_cen = sum(E * E_Dist)/ sum(E)
但现在结果更糟糕,大约是10e4。
2-我使用两个不同的高斯函数形式一个与Amplitude而另一个没有它。当我考虑振幅但没有振幅时我从来不能适应高斯函数我有高斯图但从不适合我的数据点。
我认为有一个问题是我无法正确计算Sigma或其他高斯参数。另一个可能是E_Dist值的较大差异,涵盖0到450000。
我附上我的情节可以帮助我如何解决问题?
########### Gaussian fit
E_cen= np.mean(E)
print 'E_cen=',E_cen
10.54
mean_N = np.mean(E_Dist ) # mean number of particles
print 'mean_N=',mean_N
>>>58937
sigma = np.sqrt( sum((E_Dist - mean_N)**2 )/len(E_Dist)-1 )
print 'sigma =',sigma #/1.e9,'*1.e9'
>>>119888.7
##########
# def gaus(x,a,x0,sigma):
# return a*np.exp(-(x-x0)**2/(2*sigma**2)) # Gaussian function with amplitude
#popt,pcov = curve_fit(gaus,E,E_Dist ,p0=[2,E_cen,sigma]) #
def gaus(x,x0,sigma):
return np.exp(-(x-x0)**2/(2*sigma**2))
popt,pcov = curve_fit(gaus,E,E_Dist ,p0=[E_cen,sigma]) # no amplitude
#################
print 'min(popt)=',min(popt)
>>>10.54
print 'max(popt)=',max(popt)
>>>119800
print 'mean(popt)=',np.mean(popt)
>>>59940