卡方码的顺序



我为卡方写了一个代码。 这是正确的,但有一个问题。 在最后几行中,我们可以看到c=c+chi表示 sigma 作为求和函数。 问题是,c=c+chi将以前的o_m条款添加到下一个条款中。我们必须有一个c用于o_m=20,一个c用于o_m=21,一个c用于o_m=22等等。但是在我们拥有的最后一行代码中使用c=c+chio_m=20的c,o_m=2122的c,o_m=21的c以及2223等等。 换句话说,如果我们对每个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)):

最新更新