J'ai une question importante concernant l'utilisation du test chi^2 pour contraindre un paramètre en cosmologie. J'apprécie ton aide. S'il vous plaît ne donnez pas cette question à un taux négatif (cette question est importante pour moi). Supposons que nous ayons un fichier de données (data.txt) pour conclure 600 données et que ce fichier de données comporte 3 colonnes, la première colonne est redshift (z), la seconde colonne est dL (m_obs) d'observation et la troisième colonne error (err) . Comme nous le savons fonction chi^2 esttest du chi-carré pour contraindre un paramètre
chi^2=(m_obs-m_theo)**2/err**2 #chi^2=sigma((m_obs-m_theo)**2/err**2) from 1 to N=600
Tout chose que nous devons calculer est de mettre « z » à partir du fichier de données donné dans notre fonction « m_theo » pour toutes les 600 données et calculer chi^2. Maintenant, dans "m_thoe" nous avons un paramètre libre (o_m) et nous devons trouver sa valeur dans laquelle le chi^2 atteint sa valeur minimale.
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
Cette question n'est pas répétitif et est très important pour tous les corps en utilisant chi^2 spécialement pour les cosmologistes et des physiciens. Comment trouver minimisé chi^2 et relatif 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)
Je pense que mon code est correct, mais il ne me donne pas une réponse appropriée Merci et je vous remercie de votre temps et votre attention.
Cette question est hors-sujet sur Stackoverflow, car il est pas un problème de programmation distinctive. Cependant, vous pouvez jeter un oeil à [scipy.optimize] (https://docs.scipy.org/doc/scipy/reference/optimize.html) pour l'optimisation numérique. Si vous voulez résoudre votre problème analytiquement, vous devriez envisager d'utiliser [méthode du maximum de vraisemblance] (https://en.wikipedia.org/wiki/Maximum_likelihood_estimation). – MaxPowers
@maxpowers c'est exactement un problème, j'ai écrit un code mais ça ne me donne pas la bonne réponse. merci pour votre aide – Ethan
J'ai joint le code, peut aider. Je vous remercie. S'il vous plaît ne me donnez pas de taux négatif. Ce n'est pas juste mon ami. – Ethan