如何利用曲线拟合误差?

2024-05-15 10:57:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解曲线拟合的错误,如果有人能检查一下我的代码并建议我是否正确理解错误处理,我将不胜感激。 我的目标是获取可观测值,拟合多项式,然后使用拟合参数来预测值。我需要的关键是不仅要有一个预测值,还要有一个值(y)的误差度量。 我想我已经了解了曲线拟合参数的标准误差输出,并且在我的理解中,我使用这些参数来计算预测值(y)的标准偏差。 根据我的理解,我计算的误差是标准误差,即“1*sigma”,假设正态分布,一个sigma将包含68%的零散读数。 我是否正确地理解了这一点,是否正确地利用了曲线拟合的输出来实现这一点。 下面是一些概念验证代码。你知道吗

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

#####function
def dfunc(x, a, b, c):
   return a*x*x + b*x + c  

#Set up trial data
knt=20
ANAL = np.zeros((3,knt))
rand = 20     #% randomization in trial   data
for i in range(0,knt):
  ANAL[0,i] = i
  ANAL[1,i] = dfunc(i,1,2,3)*random.randint(100-rand/2,100+rand/2)/100

#fit, determine parameters values and errors
dprm, dpcv = curve_fit(dfunc, ANAL[0,],ANAL[1,])
dgcv = np.sqrt(np.diag(dpcv))
print ("Parameter values a,b,c: %5.2f %5.2f %5.2f"
   % (dprm[0],dprm[1],dprm[2]))
print ("Parameter standard err: %5.2f %5.2f %5.2f"
   % (dgcv[0],dgcv[1],dgcv[2]))

#Utilize to predict "y std err" for x in range 0-20 
for x in range(0,20):
  ANAL[2,x]=dfunc(x,*dgcv)
  print ("For x=%5.2f  y=%6.2f with y std err(%6.2f)"
     % (x,ANAL[1,x],ANAL[2,x]))


plt.plot(ANAL[0,], ANAL[1,], 'r+', label='trial data')  
plt.plot(ANAL[0,], dfunc(ANAL[0,], *dprm), 'b-', label='best fit')
plt.errorbar(ANAL[0,],  dfunc(ANAL[0,], *dprm), yerr=ANAL[2,],linestyle="none")
plt.xlabel('value x')
plt.ylabel('y observations')
plt.legend()
plt.show()

Tags: inimportdata参数nppltfittrial