在python中求和,将变量缩放到图形

时间:2017-02-21 01:12:40

标签: python-2.7 numpy

我正在尝试在python中为Berthe-Blocke绘制对数似然函数 等式,我不断得到一个荒谬的情节。目前我正在做着

    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)

并绘制我正在给出的命令     t = numpy.arange(1,100,1)#some虚拟范围     matplotlib.plot(t,difLikelihood(t,element,mean))#mean设置

这给出了一个形状完全错误的函数,但当我尝试将总和作为

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

我抱怨错误的形状不匹配。所以我的问题是,这是一个正确的方法来做这个总和,这样我就可以用变量创建一个图表"我"? (顺便说一句,给出能量和制动力,不确定性和我们"对于大量的试验我不允许在scipy中使用Log-Likelohood的内置函数)

1 个答案:

答案 0 :(得分:0)

结果变量以整数形式传递,需要使用float(l)强制用作浮点数