У меня важный вопрос об использовании критерия chi ^ 2 для ограничения параметра в космологии. Я ценю вашу помощь. Пожалуйста, не ставьте этому вопросу отрицательную оценку (этот вопрос важен для меня).
Предположим, у нас есть файл данных (data.txt
), содержащий 600 данных, и этот файл данных имеет 3 столбца, первый столбец - красное смещение (z), второй столбец - наблюдательный dL (m_obs), а третий столбец - ошибка (err). Как мы знаем, функция chi ^ 2 есть
chi^2=(m_obs-m_theo)**2/err**2 #chi^2=sigma((m_obs-m_theo)**2/err**2) from 1 to N=600
Все, что мы должны вычислить, - это поместить z
из заданного файла данных в нашу функцию в m_theo
для всех 600 данных и вычислить chi ^ 2. Теперь в m_thoe
у нас есть свободный параметр (o_m
), и мы должны найти его значение, при котором chi ^ 2 достигает минимального значения.
q= 1/sqrt( (1+z)**2 * (1+0.01*o_m*z) - z*(2+z)*(1-0.01*o_m) )
m_theo = 5.0 * log10( (1+z)*q ) + 43.1601
Этот вопрос не повторяется и очень важен для каждого человека, использующего ци ^ 2, особенно для космологов и физиков. Как найти минимизированную chi ^ 2 и относительную o_m
?
from math import *
import numpy as np
from scipy.integrate import quad
min=l=a=b=chi=None
c=0 #for Sigma or summation chi^2 terms in c=c+chi for first term
def ant(z,o_m): #0.01*o_m is steps of o_m
return 1/sqrt(((1+z)**2*(1+0.01*o_m*z)-z*(2+z)*(1-0.01*o_m)))
for o_m in range(24,35,1): #arbitrary range of o_m
############## opening data file containing 580 dataset
with open('data.txt') as f:
for i, line in enumerate(f): #
n= list(map(float, line.split())) #
for i in range(1):
##############
q=quad(ant,0,n[1],args=(o_m,))[0] #Integration o to z, z=n[1]
h=5*log10((1+n[1])*(299/70)*q)+25 #function of dL
chi=(n[2]-h)**2/n[3]**2 #chi^2 test function
c=c+chi #sigma from 1 to N of chi^2 and N=580
if min is None or min>c:
min=c
print(c,o_m)
Я думаю, что мой код правильный, но он не дает мне правильного ответа. Спасибо, и я ценю ваше время и внимание.