拟合高斯曲线

时间:2019-05-01 07:43:10

标签: python

我的曲线拟合问题是什么?

我已经写了一些代码来根据高斯分布拟合我的数据。但是,在代码开头定义的a,b,c值有误。你能给我一些建议来解决这个问题吗?

from numpy import *
from scipy.optimize import curve_fit

def func(x, a, b, c):
    return a*exp(-(x-b)**2/(2*c**2))
file = loadtxt("angdist1.xvg", skiprows = 18, dtype = float)
x = []
y = []
for i in range(shape(file)[0]):
    x.append(file[i,0])
    y.append(file[i,1])

popt, pcov = curve_fit(func, x, y)

plt.plot(x, func(x, *popt), color = 'red', linewidth=2)
plt.legend(['Original','fitting'], loc=0)
plt.show()

1 个答案:

答案 0 :(得分:1)

您没有为变量abc提供初始猜测。 scipy.optimize.curve_fit()会做出无可辩驳的选择,假设您想要a=b=c=1的初始值。根据您的数据,可能相差太远,以至于根本无法使该方法找到任何解决方案。

解决方案是为关闭的变量提供初始值。他们不一定是完美的。例如,

ainit = y.sum()  # amplitude is within 10x of integral
binit = x.mean() # centroid is near mean x value
cinit = x.std()  # standard deviation is near range of data
popt, pcov = curve_fit(func, x, y, [ainit, binit, cinit])

可能会给您带来更好的结果。