卡方码的订单

时间:2017-08-13 21:12:26

标签: python python-2.7 python-3.x physics chi-squared

我为chi square写了一个代码。这是正确的,但有一个问题。 在最后一行中,我们可以看到c=c+chi表示sigma作为求和函数。 问题是c=c+chio_m的先前术语添加到下一个术语。我们必须为c设置一个o_m=20,为c设置一个o_m=21,为c设置一个o_m=22,依此类推。但是在最后一行代码中使用c=c+chi  c o_m=20,c o_m=2122,c,o_m = 21,2223,依此类推。 换句话说,如果我们每个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)

1 个答案:

答案 0 :(得分:0)

在代码中添加

for o_m in range(20,40): 
     c = 0
     for i in range(len(z)):