2016-04-15 11 views
1

最後の行を除くすべてが動作します。 私の目標は、カイ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() 
+0

'z'、' D 'と 'd_err'は何ですか?サンプルデータを送信できますか?それ以外の場合は、コードをデバッグするのは難しいです。 – rocksportrocker

+0

dは実験データ(モデルDLと比較)を持つ配列で、d_errはd個のエラーの配列です。 zはdの「精神的に無関係な変数」である。 omega_m、omega_1、およびH_0は、私が見つける必要があるパラメータです。 – Raizen

+0

形状とdtypes? 'z'は浮動小数点ですか? – rocksportrocker

答えて

1

。 NumPy配列である第3引数としてzを使用します。

Signature: scipy.integrate.quad(func, a, b, ...)

Integrate func from a to b (possibly infinite interval) using a technique from the Fortran library QUADPACK.

...

a : float

Lower limit of integration (use -numpy.inf for -infinity).

b : float

Upper limit of integration (use numpy.inf for +infinity).

+0

ありがとうございました。 – Raizen

+0

そのステップに関連するzだけ毎回どのように計算できますか?私はそれがそのステップのzとして "z"を理解していたことは些細なことだと思った。 – Raizen

関連する問題