2017-02-21 14 views
0

Я пытаюсь построить функцию log-правдоподобия в python для уравнения Berthe-Blocke , и я продолжаю получать бессмысленный сюжет. В настоящее время я принимаю делатьПринимая сумму в python над векторами, масштабируя переменную до графика

def Berthe_Blocke(beta, prefac, I): 
    gamma=(1/numpy.sqrt(1- beta)) 
    vsq=beta*9*10**20 
    return prefac*(numpy.log(2*0.511*numpy.power(gamma,4)*vsq*(beta)*2*0.511/ numpy.power((3*10**10)*I,2))-2*beta) #non-vectorized BB Funtion 
def Likelihood_sing(I, element,mean, k): 
    En=numpy.ones(len(pbe)) #these three make it such that the function is far more general 
    sp=numpy.zeros(len(pbe)) 
    us=numpy.ones(len(pbe)) 
    beta=numpy.ones(len(pbe)) 
    spav=numpy.ones(len(pbe)) 
    esp=numpy.ones(len(pbe)) 
    prefac=numpy.ones(len(pbe)) 
    usr=numpy.ones(len(pbe)) 
    if element=="pb": 
     En=pbe 
     sp=pbs 
     us=pbu 
     scale=0.1535*(82/207.2)*4 
    if element=="xe": 
     En=xee 
     sp=xes 
     us=xes 
     scale=0.1535*(54/131.293)*4 
    #var=0 
    beta=(1-(numpy.power(3727/ (En+3727), 2))) #from gamma=(E+m)/m 
    prefac=2*scale*(1/beta) #prefactor 
    #print("uncertianties %f", len(us)) 
    #print("values %f", len(spav)) 
    #return -(numpy.sum(sp/numpy.power(us,2))+2*numpy.sum(prefac/(numpy.power(us,2)))*(2*numpy.power(numpy.log(a),2)-numpy.log(a))+8*(numpy.sum((prefac*beta)/numpy.power(us,2)))*numpy.log(a)) 
    return(numpy.power((sp[k]-Berthe_Blocke(beta[k], prefac[k], I))/us[k],2))-(numpy.power((sp[k]-Berthe_Blocke(beta[k], prefac[k], mean))/us[k],2)) 
def difLikelihood(I,element,mean): 
    dL=0 
    if element=="pb": 
     for k in range(len(pbe)): 
      dL=dL+Likelihood_sing(I, element, mean, k) 
    if element=="xe": 
     for k in range(len(xee)): 
      dL=dL+Likelihood_sing(I, element, mean, k) 

и сюжет я даю команду т = numpy.arange (1100, 1) #Some фиктивная диапазон matplotlib.plot (т, difLikelihood (т, элемент, среднее)) #mean устанавливается

Это дает функцию, которая совершенно неправильно в форме, но когда я пытаюсь взять сумму в качестве

numpy.sum(numpy.power((sp-Berthe_Blocke)/us,2)) 

Я получаю ошибку жалуетесь несоответствие формы. Так что мой вопрос в том, является ли правильный способ сделать эту сумму, чтобы я мог создать график в терминах переменной «I»? (кстати, энергия и тормозная мощность приведены, так как неопределенность «нас» для большого количества испытаний, и мне не разрешено использовать встроенные функции для Log-Likelohood в scipy).

ответ

0

Оказывается, переменные передавались как целое число, и их необходимо было использовать в качестве поплавков с использованием float (l)