【发布时间】:2020-07-15 22:31:57
【问题描述】:
Curve_fit 拟合不正确。我正在尝试用curve_fit 拟合实验数据。数据从.txt 文件导入到数组中:
d = np.loadtxt("data.txt")
data_x = np.array(d[:, 0])
data_y = np.array(d[:, 2])
data_y_err = np.array(d[:, 3])
因为我知道必须有两个峰值,所以我的模型是两条高斯曲线的总和:
def model_dGauss(x, xc, A, y0, w, dx):
P = A/(w*np.sqrt(2*np.pi))
mu1 = (x - (xc - dx/3))/(2*w**2)
mu2 = (x - (xc + 2*dx/3))/(2*w**2)
return y0 + P * ( np.exp(-mu1**2) + 0.5 * np.exp(-mu2**2))
使用猜测值对我的猜测值非常敏感。如果几乎完美的拟合参数可以提供结果,那么拟合数据的意义何在?还是我做错了什么?
t = np.linspace(8.4, 10, 300)
guess_dG = [32, 1, 10, 0.1, 0.2]
popt, pcov = curve_fit(model_dGauss, data_x, data_y, p0=guess_dG, sigma=data_y_err, absolute_sigma=True)
A, xc, y0, w, dx = popt
绘制数据
plt.scatter(data_x, data_y)
plt.plot(t, model_dGauss(t1,*popt))
plt.errorbar(data_x, data_y, yerr=data_y_err)
产量:
结果只是图表底部的一条直线,而评估的参数并没有那么糟糕。怎么可能?
【问题讨论】:
-
sn-ps 有点不完整。尽管您应该提供数据,但您使用
t和t1没有定义后者,而第一个的范围完全错误。此外,起始值似乎不太好。当放置适当的范围时,拟合效果很好。
标签: python numpy scipy curve-fitting gaussian