我有一组数据,我喜欢拟合 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)
#####
代码有效,一切都很好。然而,我注意到由于忽略了误差线,拟合存在问题。因此,我决定包括误差线。但我不知道如何实施。你有什么建议吗?
具体操作方法如下:
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