卡方码的顺序

Chi-square code's order

我写了一个卡方代码。这是正确的,但有一个问题。 在最后几行中,我们可以看到 c=c+chi 将 sigma 表示为求和函数。 问题是,c=c+chio_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和2223的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)):