使用多项式函数

时间:2016-10-14 13:56:00

标签: python scipy curve-fitting

使用以下拟合程序,我想将二阶多项式拟合到我的数据点。我的观察结果中有x,y和y_error点。

def fit(x,y,yerr):
  popt, pcov = curve_fit(func2,x,y,p0=[-0.6,5,-12],sigma=yerr,absolute_sigma=False)
  chi=np.sum( ((func2(x, *popt) - y) / yerr)**2)
  redchi=(chi-1)/len(y)
  a=len(y)
  print "chi= " + str(chi) + " for " + str(a) + " dof" + " redchi= " +str(redchi)
  return popt,pcov,redchi,len(y)

def func(x,a,b,c):
  return (a*(x**2)+b*x+c)

popt,pcov,chi,lenny=fit(x,y,yerr)
plt.plot(x,func2(x,*popt),c=c,linewidth=2)

所以我只是使用最小二乘法来拟合这个函数。返回的值是最佳拟合的a,b,c参数(popt)和拟合中的协方差矩阵(pcov)。

我离开了参数的标准误差是来自covarance矩阵的对角线的平方根:a_err=np.sqrt(np.diag(pcov))[0]a=popt[0].

然而,参数似乎不是独立的,并且协方差矩阵具有对角线之外的值。因此(我认为)这会导致参数标准误差非常大。

从我的拟合中,我获得的参数是:

a=1.22731117 +/- 0.22210121
b=-11.31232672 +/- 2.01192621
c=43.6603686 +/- 4.53383215

参数的误差非常大!一旦通过多项式函数传播,误差就很大,并且根本不代表拟合的误差。下面是拟合值,拟合的误差区域是阴影(忽略石灰绿点),红点和误差是我观察到的数据,粗红线是拟合线,阴影橙色区域是1西格玛误差区域。

Fitted data, including error region.

当然,拟合的真正误差应该是残差yfit-ydata等。有人可以帮忙吗?在这种情况下,我不确定如何计算拟合的误差。提前谢谢。

0 个答案:

没有答案