卡方码的顺序
Chi-square code's order
我写了一个卡方代码。这是正确的,但有一个问题。
在最后几行中,我们可以看到 c=c+chi
将 sigma 表示为求和函数。
问题是,c=c+chi
将 o_m
的前一项添加到下一项。我们必须有一个 c
代表 o_m=20
,一个 c
代表 o_m=21
,一个 c
代表 o_m=22
等等。但是在代码的最后一行使用 c=c+chi
o_m=20
的c,o_m=21
和[=23=的c],o_m=21和22
和23
的c等等。
换句话说,如果我们每个 o_m
的输出必须在 560、565、571、574 左右,...,这个问题将我们的输出变成
560, 1048, 1563, 2073,...
c=c+chi
必须对每个 o_m
.
来自数据文件的所有 z
求和
我的代码顺序有什么问题?
感谢您的帮助和关注
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)
在代码中添加
for o_m in range(20,40):
c = 0
for i in range(len(z)):
我写了一个卡方代码。这是正确的,但有一个问题。
在最后几行中,我们可以看到 c=c+chi
将 sigma 表示为求和函数。
问题是,c=c+chi
将 o_m
的前一项添加到下一项。我们必须有一个 c
代表 o_m=20
,一个 c
代表 o_m=21
,一个 c
代表 o_m=22
等等。但是在代码的最后一行使用 c=c+chi
o_m=20
的c,o_m=21
和[=23=的c],o_m=21和22
和23
的c等等。
换句话说,如果我们每个 o_m
的输出必须在 560、565、571、574 左右,...,这个问题将我们的输出变成
560, 1048, 1563, 2073,...
c=c+chi
必须对每个 o_m
.
z
求和
我的代码顺序有什么问题?
感谢您的帮助和关注
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)
在代码中添加
for o_m in range(20,40):
c = 0
for i in range(len(z)):