Alles funktioniert bis auf die letzte Zeile. Mein Ziel ist es, die beste Anpassung durch den Chi-Quadrat-Test zu berechnen. Mit der Anwendung der Funktion "lostsq" stimmt etwas nicht. z, d und d_err sind Arrays der gleichen Länge, angegeben (die experimentellen Daten).Python: optimize.leastsq. ValueError: Der Wahrheitswert eines Arrays mit mehr als einem Element ist mehrdeutig
def df(z,omega_m,omega_l):
return 1/(np.sqrt(omega_m*(1+z)**3+(1-omega_m-omega_l)*(1+z)**2+omega_l))
def DL(z,omega_m,omega_l,H_0): # checked with Hubble's law with low z, it is consistent
f,err_f=scipy.integrate.quad(df,0,z,args=(omega_m,omega_l)) # it's evident err_f it's irrelevant
if omega_m+omega_l==1:
return 299792./H_0*(1+z)*f
elif omega_m+omega_l<1:
fk=np.sin(np.sqrt(np.absolute(1-omega_l-omega_m))*f)
return 299792./H_0*(1+z)/np.sqrt(np.absolute(1-omega_m-omega_l))*fk
elif omega_m+omega_l>1:
fk=np.sinh(np.sqrt(np.absolute(1-omega_l-omega_m))*f)
return 299792./H_0*(1+z)/np.sqrt(np.absolute(1-omega_m-omega_l))*fk
params=(0.3,0.7,73) # starting values for minimization omega_m, omega_l, H_0
def chi(params,z,d,d_err): # checked, this function works
return (d-DL(z,params[0],params[1],params[2]))**2/d_err
minimization,minimization_cov=optimize.leastsq(chi,params,args=(z,d,d_err))
Dies ist die komplette Meldung des Fehlers:
File "C:\Python34\lib\site-packages\scipy\integrate\quadpack.py", line 360, in _quad
if (b != Inf and a != -Inf): ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Was 'Z' sind, 'd' und' d_err'? Können Sie Beispieldaten senden? Sonst ist dein Code schwer zu debuggen. – rocksportrocker
d ist das Array mit den experimentellen Daten (verglichen mit dem Modell DL), d_err ist das Array der d-Fehler. z ist die "spermentale unabhängige Variable" von d. omega_m, omega_l und H_0 sind die Parameter, die ich finden muss. – Raizen
Und Form und dtypes? 'z' ist ein float? – rocksportrocker