【发布时间】:2013-10-12 22:25:01
【问题描述】:
我正在尝试为我的数据拟合一个高斯(这已经是一个粗略的高斯)。我已经听取了这里的建议并尝试了curve_fit 和leastsq,但我认为我缺少一些更基本的东西(因为我不知道如何使用该命令)。
这是我到目前为止的脚本
import pylab as plb
import matplotlib.pyplot as plt
# Read in data -- first 2 rows are header in this example.
data = plb.loadtxt('part 2.csv', skiprows=2, delimiter=',')
x = data[:,2]
y = data[:,3]
mean = sum(x*y)
sigma = sum(y*(x - mean)**2)
def gauss_function(x, a, x0, sigma):
return a*np.exp(-(x-x0)**2/(2*sigma**2))
popt, pcov = curve_fit(gauss_function, x, y, p0 = [1, mean, sigma])
plt.plot(x, gauss_function(x, *popt), label='fit')
# plot data
plt.plot(x, y,'b')
# Add some axis labels
plt.legend()
plt.title('Fig. 3 - Fit for Time Constant')
plt.xlabel('Time (s)')
plt.ylabel('Voltage (V)')
plt.show()
我从中得到的是一个高斯形状,这是我的原始数据,以及一条水平直线。
另外,我想用点来绘制我的图表,而不是让它们连接起来。 任何输入表示赞赏!
【问题讨论】:
-
您缺少一些或您的导入。
mean是产品的总和,所以需要除以len(x)