最後の行を除くすべてが動作します。 私の目標は、カイ2乗検定による最良適合を計算することです。 leastsq関数のアプリケーションに何か問題があります。 z、d、およびd_errは、与えられた同じ長さの配列です(実験データ)。Python:optimize.leastsq。 ValueError:複数の要素を含む配列の真理値はあいまいです
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))
これは、エラーの完全なメッセージである。scipy.integrate.quad()
に3番目の引数が上限であり、フロートでなければならない
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()
'z'、' D 'と 'd_err'は何ですか?サンプルデータを送信できますか?それ以外の場合は、コードをデバッグするのは難しいです。 – rocksportrocker
dは実験データ(モデルDLと比較)を持つ配列で、d_errはd個のエラーの配列です。 zはdの「精神的に無関係な変数」である。 omega_m、omega_1、およびH_0は、私が見つける必要があるパラメータです。 – Raizen
形状とdtypes? 'z'は浮動小数点ですか? – rocksportrocker