我正在尝试自动将高斯曲线拟合到数据中,但scipy似乎无法拟合只显示一半曲线的数据。然而,Scipy似乎无法做到这一点。你知道吗
高斯曲线数据右侧的外观: https://i.imgur.com/LwzN2Jd.png
我试过用下面的代码来拟合曲线。它适合完全弯曲。但对于半曲线,它是平的
''
plotData = {}
#x = 0,2.5,5
#y = 16766,508,600.6
modelDataDf = df.loc[:,["x","y"]]
modelDataDf.sort_values(by=["x"],inplace=True)
modelData = modelDataDf.to_dict(orient="list")
def _1gaussian(x, amp1,cen1,sigma1):
return amp1*(1/(sigma1*(np.sqrt(2*np.pi))))*(np.exp(-((x-cen1)**2)/((2*sigma1)**2)))
x_array = np.asarray(modelData["x"])
y_array_gauss = np.asarray(modelData["y"])
amp1 = 29000
sigma1 = 1
cen1 = -1
popt_gauss, pcov_gauss = scipy.optimize.curve_fit(_1gaussian, x_array, y_array_gauss, p0=[amp1, cen1, sigma1])
perr_gauss = np.sqrt(np.diag(pcov_gauss))
plotData["xGaussCurve"] = np.arange(0, 5.05, 0.05)
plotData["yGaussCurve"] = _1gaussian(plotData["xGaussCurve"],*popt_gauss)
''
合身的样子: https://i.imgur.com/0gfqiRF.png
它卡在半高斯上: https://i.imgur.com/Jsi4fzA.png
蓝色的点表示数据,粗体的红线表示要显示的拟合,红色的虚线表示拟合失败。你知道吗
我得到一个错误:
RuntimeError:找不到最佳参数:对函数的调用数已达到maxfev=800。你知道吗
当试图拟合半高斯时。你知道吗
如前所述,只有三个数据点就无法完全拟合高斯分布,因为参数和观测值一样多。你知道吗
但是如果你确定它是“半”高斯,那么这意味着你知道高斯的质心应该在哪里(也许在x=0或者x=-1或者其他的位置)。如果是这样的话,你可以固定质心,改变高斯函数的振幅和sigma。也许是这样的
相关问题 更多 >
编程相关推荐