【发布时间】:2018-11-30 19:47:54
【问题描述】:
我正在尝试用高斯拟合数据。
原始数据本身显示了一个非常明显的峰值。 当我尝试使用curve_fit进行拟合时,拟合会识别出峰值,但它没有弯曲的顶部。 我现在也在尝试用 spinmob 的 fitter 来拟合数据。然而,这个拟合只是给出了一条直线。
我已尝试更改拟合器的几个参数、高斯函数定义以及拟合的初始参数,但似乎没有任何效果。
代码如下:
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
import spinmob as s
x = x30
y = ydata
def gaussian(x, A, mu, sig): # See http://mathworld.wolfram.com/GaussianFunction.html
return A/(sig * np.sqrt(2*np.pi)) * np.exp(-np.power(x-mu, 2) / (2 * np.power(sig, 2)))
popt,pcov = curve_fit(gaussian,x,y,p0=[1,7.688,0.005])
FWHM = 2*np.sqrt(2*np.log(2))*popt[2]
print("FWHM: {}".format(FWHM))
plt.plot(x,y,'bo',label='data')
plt.plot(x,gaussian(x,*popt),'r+-',label='fit')
plt.legend()
fitter = s.data.fitter()
fitter.set(subtract_bg=True, plot_guess_zoom=True)
fitter.set_functions(f=gaussian, p='A=1,mu=8.688,sig=0.001')
fitter.set_data(x, y, eydata = 0.03)
fitter.fit()
curve_fit 返回此图: Curve_fit plot
spinmob fitter plot 给出了这个: Spinmob Fitter Plot
【问题讨论】:
-
能否请您发布数据链接?
-
作为测试,如果您使用 spinmob 中的值作为 curve_fit 的 p0 值并且它工作正常,那么问题应该是传递给 curve_fit 的初始参数。你能做这个测试吗?
标签: python curve-fitting gaussian