Этот код Python:
import numpy,math
import scipy.optimize as optimization
import matplotlib.pyplot as plt
# Create toy data for curve_fit.
zo = numpy.array([0.0,1.0,2.0,3.0,4.0,5.0])
mu = numpy.array([0.1,0.9,2.2,2.8,3.9,5.1])
sig = numpy.array([1.0,1.0,1.0,1.0,1.0,1.0])
# Define hubble function.
def Hubble(x,a,b):
return H0 * m.sqrt( a*(1+x)**2 + 1/2 * a * (1+b)**3 )
# Define
def Distancez(x,a,b):
return c * (1+x)* np.asarray(quad(lambda tmp:
1/Hubble(a,b,tmp),0,x))
def mag(x,a,b):
return 5*np.log10(Distancez(x,a,b)) + 25
#return a+b*x
# Compute chi-square manifold.
Steps = 101 # grid size
Chi2Manifold = numpy.zeros([Steps,Steps]) # allocate grid
amin = 0.2 # minimal value of a covered by grid
amax = 0.3 # maximal value of a covered by grid
bmin = 0.3 # minimal value of b covered by grid
bmax = 0.6 # maximal value of b covered by grid
for s1 in range(Steps):
for s2 in range(Steps):
# Current values of (a,b) at grid position (s1,s2).
a = amin + (amax - amin)*float(s1)/(Steps-1)
b = bmin + (bmax - bmin)*float(s2)/(Steps-1)
# Evaluate chi-squared.
chi2 = 0.0
for n in range(len(xdata)):
residual = (mu[n] - mag(zo[n], a, b))/sig[n]
chi2 = chi2 + residual*residual
Chi2Manifold[Steps-1-s2,s1] = chi2 # write result to grid.
Выдает это сообщение об ошибке:
ValueError Traceback (most recent call last)
<ipython-input-136-d0ef47a881a7> in <module>()
36 residual = (mu[n] - mag(zo[n], a, b))/sig[n]
37 chi2 = chi2 + residual*residual
---> 38 Chi2Manifold[Steps-1-s2,s1] = chi2 # write result to
grid.
ValueError: setting an array element with a sequence.
Примечание. Если я определю простую функцию mag, такую как (a + b * x), ясообщение об ошибке не выдается.
Фактически все три функции Hubble, Distancez и Meg должны быть функциями красного смещения z, являющегося массивом.
Теперь вы думаете, что янужно переопределить все эти функции, чтобы иметь выходной массив?Я имею в виду сначала создать массив красного смещения, а затем выходные данные функций автоматически становятся массивом?
Мне нужны выходные данные функций Distancez () и mag (), которые должны быть массивами.Мне удалось это сделать, просто изменив верхний предел интеграла в функции Distancez с x на x.any ().Теперь у меня есть массив, и это то, что я хочу.Однако теперь я вижу, что выходное значение, например, Расстояния (0,25, 0,5, 0,3) отличается от того, когда я просто помещаю x в верхний предел интеграла?Буду признателен за любую помощь.
Спасибо за ваш ответ.
Мне нужно, чтобы выходные данные функций Distancez () и mag () были массивами.Мне удалось это сделать, просто изменив верхний предел интеграла в функции Distancez с x на x.any ().Теперь у меня есть массив, и это то, что я хочу.Однако теперь я вижу, что выходное значение, например, Расстояния (0,25, 0,5, 0,3) отличается от того, когда я просто помещаю x в верхний предел интеграла?Любая помощь будет оценена.