1
我有一個關於使用chi^2測試來限制宇宙學參數的重要問題。我感謝您的幫助。請不要給這個問題負面的利率(這個問題對我很重要)。假設我們有一個結束600個數據的數據文件(data.txt),這個數據文件有3列,第一列是紅移(z),第二列是觀測dL(m_obs),第三列是錯誤(err) 。正如我們所知道志^ 2的功能是約束參數的卡方檢驗
chi^2=(m_obs-m_theo)**2/err**2 #chi^2=sigma((m_obs-m_theo)**2/err**2) from 1 to N=600
的,我們必須計算從給定的數據文件中把「Z」到我們的功能「m_theo」的所有600個數據,並計算卡^ 2的事情全部。現在在「m_thoe」中我們有一個自由參數(o_m),我們必須找到其中chi^2達到其最小值的值。
q= 1/sqrt((1+z)**2 * (1+0.01*o_m*z) - z*(2+z)*(1-0.01*o_m))
m_theo = 5.0 * log10((1+z)*q) + 43.1601
這個問題不重複使用是每一個身體非常重要的陰氣^ 2專爲宇宙學家和物理學家。 如何找到最小化chi^2和相對o_m?
from math import *
import numpy as np
from scipy.integrate import quad
min=l=a=b=chi=None
c=0 #for Sigma or summation chi^2 terms in c=c+chi for first term
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(24,35,1): #arbitrary range of o_m
############## opening data file containing 580 dataset
with open('data.txt') as f:
for i, line in enumerate(f): #
n= list(map(float, line.split())) #
for i in range(1):
##############
q=quad(ant,0,n[1],args=(o_m,))[0] #Integration o to z, z=n[1]
h=5*log10((1+n[1])*(299/70)*q)+25 #function of dL
chi=(n[2]-h)**2/n[3]**2 #chi^2 test function
c=c+chi #sigma from 1 to N of chi^2 and N=580
if min is None or min>c:
min=c
print(c,o_m)
我覺得我的代碼是正確的,但它並沒有給我一個正確的答案 謝謝你,我很欣賞你的時間和注意力。
這個問題是題外話#2,因爲它是不是一個獨特的規劃問題。但是,您可能希望查看[scipy.optimize](https://docs.scipy.org/doc/scipy/reference/optimize.html)進行數值優化。如果你想解析你的問題,你應該考慮使用[最大似然法](https://en.wikipedia.org/wiki/Maximum_likelihood_estimation)。 – MaxPowers
@maxpowers這完全是一個問題,我寫了一個代碼,但它沒有給我正確的答案。謝謝你的幫助 – Ethan
我附上了代碼,可能有幫助。謝謝。請不要給我負面的利率。我的朋友不公平。 – Ethan