gpt4 book ai didi

python - 用curve_fit拟合函数,但拟合曲线错误

转载 作者:行者123 更新时间:2023-12-04 10:38:49 25 4
gpt4 key购买 nike

def gaus(x,a,x0,sigma):
return a*np.exp(-(x-x0)**2/(2*sigma**2))

times, amplitudes = openFile("../datafiles/number_of_counts.txt")

mean = sum(np.array(times)*np.array(amplitudes))/sum(amplitudes)
sigma = np.sqrt(sum(np.array(amplitudes)*(np.array(times)-mean)**2)/sum(amplitudes))

params,pcov = curve_fit(gaus,times, amplitudes,p0=[max(amplitudes),mean,sigma])


plt.plot(times, amplitudes)
plt.plot(times ,gaus(np.array(times),params[0],params[1],params[2]),'r', label="fitted curve")

plt.ylabel("Coincidents")
plt.title("Coincident plot")
plt.legend()
plt.show()

enter image description here

我的高斯拟合不能正常工作,但看起来像一条柔和的曲线,而不是拟合尖峰,我认为我的脚本中有一些 super 愚蠢的错误,但不确定是什么。有谁能看出来?

最佳答案

您的数据具有大约 3750 的恒定偏移量,但您的 gaus 模型函数无法解释这一点,因此您正在拟合偏移量为 0 的正态分布。

它还需要一个参数:

def gaus(x, a, x0, sigma, c):
return a * np.exp(-(x - x0)**2 / (2 * sigma**2)) + c

然后:
offset_guess = 3750  # maybe calculate it from the data as well
params, pcov = curve_fit(
gaus, times, amplitudes,
p0=[max(amplitudes), mean, sigma, offset_guess])

plt.plot(times, gaus(np.array(times), params[0], params[1], params[2], params[3]), ...)

结果:
>>> print(params)
[1545.00193331 -20.45639132 -43.28484495 3792.41050636]

resulting plot

关于python - 用curve_fit拟合函数,但拟合曲线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com