在Python中使用误差线在数据点上拟合Sersic配置文件

问题描述 投票:0回答:1

我有一组数据,我喜欢拟合 1D-Sersic 配置文件(天体学中已定义的函数),如果我简单地考虑没有任何误差线的数据点,我可以轻松拟合数据,如下所示:

import numpy as np
from astropy.modeling import models, fitting
from astropy.modeling.models import Sersic1D
##
data_LARS02 =np.loadtxt('/Users/a/data.asc')
##
r_l02        =  data[:,0]
flux_l02     =  data[:,1]   
###########################################Fitting 


sers_l02_init = Sersic1D(amplitude=5e40, r_eff=1, n=2)
fit_sers_l02 = fitting.LevMarLSQFitter()
Sers_l02 = fit_sers_l02(sers_l02_init,r_l02,flux_l02)
#####

代码有效,一切都很好。然而,我注意到由于忽略了误差线,拟合存在问题。因此,我决定包括误差线。但我不知道如何实施。你有什么建议吗?

python numpy data-fitting
1个回答
1
投票

具体操作方法如下:

import numpy as np
from astropy.modeling import models, fitting

####### Reading data #######
data_LARS02 =np.loadtxt('/Users/a/data.asc')

r_l02        =  data[:,0]
flux_l02     =  data[:,1]   
flux_err_l02 =  data[:,2] #assuming your data has errors at this column

####### Initiate the model and fitter #######
sers_l02_init = models.Sersic1D(amplitude=5e40, r_eff=1, n=2)
fit_sers_l02 = fitting.LevMarLSQFitter(calc_uncertainties=True)

####### Fitting the data #######
Sers_l02 = fit_sers_l02(sers_l02_init,r_l02,flux_l02,weights=1/(flux_err_l02**2))

####### Plotting the result #######
plt.figure()
plt.errorbar(r_l02, flux_l02, yerr=flux_err_l02, fmt='ko', label='Data')
plt.plot(r_l02, sers_l02_init(r_l02), 'b-', label='Initial Model')
plt.plot(r_l02, Sers_l02(r_l02), 'k-', label='Fitted Model')
plt.xlabel('Radius')
plt.ylabel('Flux')
plt.legend()

有关更多详细信息,您可以参考他们的网站:https://docs.astropy.org/en/stable/modeling/example-fitting-line.html#fit-using-uncertainties

© www.soinside.com 2019 - 2024. All rights reserved.