python拟合曲线误差分析_python曲线拟合不能给出合理的拟合结果
您错误地调用了curve_fit,下面是用法curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, **kw)f是您的函数,它的第一个参数是一组自变量,其后续参数是函数参数(如振幅、中心等)
扩展数据是自变量
ydata是依赖变量
p0是对函数参数的初始猜测(对于Guassian,这是振幅、宽度和中心)
默认情况下,p0被设置为一个1的列表[1,1,…],这可能就是为什么您得到的结果是,fit永远不会执行,因为您调用不正确。在
尝试从数据中估计振幅、中心和宽度,然后制作一个p0对象(详见下文)
^{pr2}$
下面是一个简短的例子xdata = np.linspace(0, 4, 50)
mygauss = ( 10,2,0.5) #( amp, center, width)
y = func(xdata, *mygauss ) # using your func defined above
ydata = y + 2*(np.random.random(50)- 0.5) # add some noise to create fake data
现在我能猜出合适的参数了ai = np.max( ydata) # guess the amplitude
xi = xdata[ np.argmax( ydata)] # guess the position of center
猜测宽度是很棘手的,我首先会找到半最大值的位置(有两个,但您只需要找到一个,因为高斯是对称的):pos_half = argmin( np.abs( ydata-ao/2 ) ) # subtract half the amplitude and find the minimum
现在评估这是从高斯中心(席)的距离:sig_i = np.abs( xi - xdata[ pos_half] ) # estimate the width
现在你可以做出初步的猜测了init_guess = (ai, xi sig_i)
合身params, variance = curve_fit( func, xdata=xdata, ydata=ydata, p0=init_guess)
print params
#array([ 9.99457443, 2.01992858, 0.49599629])
非常接近mygauss。希望有帮助。在
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
