2017-02-10 2 views
1

私は尤度関数を計算するプログラムを作成しています。Python:尤度関数の値の範囲を差し込むと、常に同じ値が返されます

#loglikelihood 
def like_xe(I): 
    model=(0.1535*(Z/A)*((charge*c/v_array)**2))*(np.log((2*m_e*(gamma_array**2)*(v_array**2)*(w_array)/((I*1.6E-6)**2)))-(2*(v_array/c_speed)**2)) 
return np.sum(((-0.5*np.log(2*np.pi*xe_un))-((xe_sp-(model))/(2*xe_un**2)))) 

「配列は」私は私の1000の値のための尤度関数を計算する、長さ50の全てすると、すべてのデータの配列です:私はフィットしようとしているパラメータは、これは私の関数であるIです。 0.0001〜0.001の間であり、このデータから尤度関数の最大値を抽出する。

I_list=np.arange(1E-4,0.001,1000) 
like_val=[0 for like in range(len(I_list))] 
for like in range(len(I_list)): 
    like_val[like]=like_xe(I_list[like]) 

これは[-169.58003268336941]のみを返します。明らかに、これは間違っています。どのように私はこの問題に近づいているのですか?これはおそらくreturn文を1回だけ読み込むためですか?

EDIT:np.arangeをnp.linspaceに変更しました。これは、正しいサイズの配列を作成しますが、値-169.58003268336941で完全に満たされています。

+0

を単一の巨大な行ではなく変数に物を入れる方が簡単かもしれません。 – user3591723

答えて

1

np.arangeは、開始、停止、ステップをとります。 1e-4と0.0001との間の1000のステップは1の値を意味する。

>> np.arange(1E-4,0.001,1000) 
array([ 0.0001]) 

np.linspaceでこれを交換し、あなたがより良い反復取得する必要があります。サンプルコードを投稿するときは(簡潔にするために10ではなく1000に設定)

>> np.linspace(1E-4,0.001,10) 
array([ 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007, 
    0.0008, 0.0009, 0.001 ]) 

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html

+0

これは本当に正しいサイズのリストを返します!ただし、このリストの各値はまったく同じ-169.58003268336941で、今は1000回です。 – Hannah

+0

このエラーの原因は、定義されていない定数のためにデバッグできないlike_xe関数の範囲内です。 –

関連する問題