У меня есть следующая функция
q = 1 / sqrt( ((1+z)**2 * (1+0.01*o_m*z) - z*(2+z)*(1-o_m)) )
h = 5 * log10( (1+z)*q ) + 43.1601
У меня есть экспериментальные ответы на вышеуказанное уравнение, и однажды я должен поместить некоторые данные в вышеуказанную функцию и решить уравнение ниже
chi=(q_exp-q_theo)**2/err**2 # this function is a sigma, sigma chi from z=0 to z=1.4 (in the data file)
z
, err
и q_exp
находятся в файле данных (2.txt). Теперь мне нужно выбрать диапазон для o_m
(0.2 to 0.4)
и найти, в каком o_m
функция chi
будет свернута.
мой код:
from math import *
from scipy.integrate import quad
min = None
l = None
a = None
b = None
c = 0
def ant(z,om,od):
return 1/sqrt( (1+z)**2 * (1+0.01*o_m*z) - z*(2+z)*o_d )
for o_m in range(20,40,1):
o_d=1-0.01*o_m
with open('2.txt') as fp:
for line in fp:
n = list( map(float, line.split()) )
q = quad(ant,n[0],n[1],args=(o_m,o_d))[0]
h = 5.0 * log10( (1+n[1])*q ) + 43.1601
chi = (n[2]-h)**2 / n[3]**2
c = c + chi
if min is None or min>c:
min = c
l = o_m
print('chi=',q,'o_m=',0.01*l)
n[1]
, n[2]
, n[3]
, n[4]
— это z1
, z2
, q_exp
и err
соответственно в файле данных. а z1
и z2
— диапазон интегрирования. Мне нужна ваша помощь, и я ценю ваше время и ваше внимание. Пожалуйста, не оценивайте отрицательное значение. Мне нужны ваши ответы.
ant()
естьo_m
иo_d
, а уq
выше есть толькоo_m
. - person mikuszefski   schedule 04.08.2017scipy.optimize.leastsq
? Кстати, если данные не слишком велики, просто загрузите их один раз в начале, возможно, с помощьюnumpy.loadtxt()
- person mikuszefski   schedule 04.08.2017print()
вы открываете с помощью'
, но закрываете с помощью"
, и вы, вероятно, хотите напечататьc
, а неq
, которое вы должны назвать, например.c2
так как на самом деле это квадрат. Это позволяет избежать путаницы. Некоторые отступы кажутся неправильными. Комментарий к вводу pythonic:min == None
работает, ноmin is None
выглядит лучше. Может быть, дажеif not min
. И вы действительно хотите сравнить сh
или сc
? - person mikuszefski   schedule 04.08.2017[0.2,0.4]
известной границей подгонки или вы просто предполагаете, что он находится внутри этого интервала. Допустимы ли значения вне интервала? - person mikuszefski   schedule 04.08.2017