Я пытаюсь автоматически подогнать гауссиан к данным, но Сципи не может подобрать данные, которые показывают только половину кривой.Однако Сципи, похоже, не может этого сделать.
как выглядит правая часть данных кривой Гаусса: 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
синие точки показывают данные, жирная красная линия показывает подгонку, которую я хочу показать, красная пунктирная линия - неудачная подгонка.
Iполучить ошибку:
RuntimeError: Оптимальные параметры не найдены: число вызовов функции достигло maxfev = 800.
При попытке подгонки к половине гауссиана.