gpt4 book ai didi

python - Python 图中的高斯拟合

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:20 25 4
gpt4 key购买 nike

我正在尝试将高斯函数拟合到我的 Python 图中。我已在此处附上代码。任何更正将不胜感激!

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import math
import random
from numpy import genfromtxt

data= genfromtxt ('PVC_Cs137.txt')
plt.xlim(0,2500)
plt.ylim(0,30000)
plt.xlabel("Channel number")
plt.ylabel("Counts")

x = data[:,0]
y = data[:,1]

n = len(x)
mean = sum(x*y)/n
sigma = sum(y*(x-mean)**2)/n

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

popt,pcov = curve_fit(gaus,x,y,p0=[1,mean,sigma])

plt.plot(x,gaus(x,*popt))
plt.show()

这是我的文件的链接: https://www.dropbox.com/s/hrqjr2jgfsjs55x/PVC_Cs137.txt?dl=0

最佳答案

您的方法有两个问题。一是与编程相关。高斯拟合函数必须与 numpy 数组一起使用。 math functions can't provide this functionality, they work with scalars.因此你的拟合函数应该是这样的

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

这会通过正确的均值/西格玛组合产生像这样的高斯曲线

enter image description here

现在我们查看文件中值的分布:

enter image description here

这甚至看起来都不像高斯曲线。难怪拟合函数不收敛。

实际上还有第三个问题,你的均值/西格玛计算是错误的,但由于你无法将你的数据拟合到高斯分布,所以我们现在可以忽略这个问题。

关于python - Python 图中的高斯拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49016939/

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