Ich schreibe ein Programm, um eine Likelihood-Funktion zu berechnen. Der Parameter I zu passen versuche ist I. Das ist meine Funktion ist:Python: Plugging in Bereich von Werten für Likelihood-Funktion liefert immer den gleichen Wert
#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))))
Die „arrays“ sind alle Datenfelder, 50. Dann werden alle Länge, ich möchte die Likelihood-Funktion für 1000 Werte von I berechnen zwischen 0,0001 und 0,001, und aus diesen Daten wird der Maximalwert der Wahrscheinlichkeitsfunktion extrahiert.
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])
Dies gibt nur zurück [-169.58003268336941]. Offensichtlich ist das falsch. Was ist los mit dem, wie ich mich diesem Problem annähere? Ist es möglicherweise, weil es die Rückkehranweisung nur einmal liest?
EDIT: Changed die np.arange zu np.linspace. Dies erzeugt ein Array der richtigen Größe, ist jedoch vollständig mit dem Wert -169.58003268336941 gefüllt.
Wenn Beispielcode veröffentlichen Es könnte einfacher sein, Dinge in Variablen anstatt in eine einzige riesige Linie zu schreiben. – user3591723