def riess_sn_fit(app_mag_s, app_mag_err_s, z_s, sig_int_s):
# helpful parameters. only fitting an intercept here
n_s = len(app_mag_s)
n_obs = n_s
n_par = 1
y_vec = np.zeros(n_obs)
l_mat = np.zeros((n_obs, n_par))
c_mat_inv = np.zeros((n_obs, n_obs))
# loop through SNe
k = 0
for i in range(0, n_s):
y_vec[k] = np.log10(z2d(z_s[i])) - 0.2 * app_mag_s[i]
l_mat[k, 0] = 1.0
c_mat_inv[k, k] = 1.0 / 0.2 ** 2 / \
(app_mag_err_s[i] ** 2 + sig_int_s ** 2)
k += 1
# fit, calculate residuals in useable form and return
ltci = np.dot(l_mat.transpose(), c_mat_inv)
q_hat_cov = np.linalg.inv(np.dot(ltci, l_mat))
q_hat = np.dot(np.dot(q_hat_cov, ltci), y_vec)
res = y_vec - np.dot(l_mat, q_hat)
return q_hat, np.sqrt(np.diag(q_hat_cov)), res
评论列表
文章目录