Python 在将数据拟合到高斯分布时,如何在lmfit中包含误差条?
我使用lmfit将我的数据拟合到高斯分布。有三件事我正试图做到: 1) 了解如何在lmfit中计算误差 2) 如何在lmfit中包含我自己的计算错误 3) 如何在拟合范围内绘制误差Python 在将数据拟合到高斯分布时,如何在lmfit中包含误差条?,python,lmfit,Python,Lmfit,我使用lmfit将我的数据拟合到高斯分布。有三件事我正试图做到: 1) 了解如何在lmfit中计算误差 2) 如何在lmfit中包含我自己的计算错误 3) 如何在拟合范围内绘制误差 def gaussian(x, amp, cen, fwhm): return + amp * np.exp(-(x - cen) ** 2 / (2 * (fwhm / 2.35482) ** 2)) def gaussian_fit(x,y,guess=[1,0,0,5],varies=[Tru
def gaussian(x, amp, cen, fwhm):
return + amp * np.exp(-(x - cen) ** 2 / (2 * (fwhm / 2.35482) ** 2))
def gaussian_fit(x,y,guess=[1,0,0,5],varies=[True,True,True,True]):
c = 299792458 #m/s
gmod = Model(gaussian)
gmod.nan_policy = 'omit'
#x,y - your dataset to fit, with x and y values
print (np.max(y))
gmod.set_param_hint('amp', value=guess[0],vary=varies[0])
gmod.set_param_hint('cen', value=guess[1],vary=varies[1])
gmod.set_param_hint('fwhm', value=guess[2],vary=varies[2])
gmod.make_params()
result = gmod.fit(y,x=x,amp=guess[0], cen=guess[1], fwhm=guess[2])
amp = result.best_values['amp']
cen = result.best_values['cen']
fwhm = result.best_values['fwhm']
#level = result.best_values['level']
sigma = fwhm / 2.35482
c = 299792458 #m/s
print(result.fit_report())
gaussfield = amp * np.sqrt(2 * np.pi * sigma ** 2)
residual = y - result.best_fit
print ('params:',amp,cen,fwhm,sigma,gaussfield)
return amp,cen,fwhm,sigma,gaussfield,residual
amp, cen, fwhm, sigma, gaussfield, residual
= gaussian_fit(xdata,ydata,guess=[.1,6.9,.02],varies=[True,False,False])
我看不出脚本中包含了哪些错误,那么它们是如何包含在最终报告中的呢?如何将您自己的错误而不是lmfit的错误包括在内,以及如何最终绘制这些错误?首先,我建议只使用
lmfit.models.GaussianModel
,而不要使用set\u param\u hint()
——只需显式,而不是巧妙地——例如:
from lmfit.models import GaussianModel
gmodel = GaussianModel()
params = gmodel.make_params(amplitude=1, center=0, sigma=2)
result = gmodel.fit(y, params, x=x)
print(result.fit_report())
现在,请回答您的问题:
卡方
定义为剩余数组(数据拟合)/数据不确定性的平方和
,每个参数的不确定性(以及参数-参数相关性)估计为将卡方
增加1的值。关于非线性最小二乘拟合的工作原理,还有许多更深入的资源可用权重
数组传递给模型。拟合
,可能是
结果=gmodel.fit(y,参数,x=x,权重=1.0/dely)errorbar
函数绘制数据及其错误条。如果要绘制参数不确定性对最佳拟合曲线预期范围的影响,可以使用delmodel=result.eval\u不确定性(x=x)
,然后绘制x
vsresult.best\u fit+delmodel
和result.best\u fit-delmodel
。Matplotlib的fill_-between
函数通常对此很有用回答我的问题非常彻底和容易理解!非常感谢。