我为chi square写了一个代码。这是正确的,但有一个问题。
在最后一行中,我们可以看到c=c+chi
表示sigma作为求和函数。
问题是c=c+chi
将o_m
的先前术语添加到下一个术语。我们必须为c
设置一个o_m=20
,为c
设置一个o_m=21
,为c
设置一个o_m=22
,依此类推。但是在最后一行代码中使用c=c+chi
c o_m=20
,c o_m=21
和22
,c,o_m = 21,22
和23
,依此类推。
换句话说,如果我们每个o_m
的输出必须是560,565,571,574,......,这个问题就会把我们的输出变成
560,1048,1563,2073,......
c=c+chi
必须对每个z
的数据文件中的所有o_m
求和。
我的代码订单出了什么问题?
感谢您的帮助和关注
from math import *
import numpy as np
from scipy.integrate import quad
min=l=a=b=chi=None
c=0
z,mo,err=np.genfromtxt('Union2.1_z_dm_err.txt',unpack=True)
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(20,40):
for i in range(len(z)):
q=quad(ant,0,z[i],args=(o_m,))[0] #Integration o to z
h=5*log10((1+z[i])*(299000/70)*q)+25 #function of dL
chi=(mo[i]-h)**2/err[i]**2 #chi^2 test function
c=c+chi
l=o_m
print('chi^2=',c,'Om=',0.01*l,'OD=',1-0.01*l)
答案 0 :(得分:0)
在代码中添加
for o_m in range(20,40):
c = 0
for i in range(len(z)):