0
我想绘制一个对数似然函数在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)
,并绘制我给的命令 T = numpy.arange(1100,1)#some虚拟范围 matplotlib.plot(T,difLikelihood(T,元素,平均值) )#mean设置
这给出了一个功能,其形状完全错误的,但是当我尝试采取的总和
numpy.sum(numpy.power((sp-Berthe_Blocke)/us,2))
我得到一个错误抱怨形状不匹配。所以我的问题是,是否这是一个适当的方法来做这个总和,以便我可以根据变量“I”创建一个图形? (顺便说一句,能量和停止能力是给出的,因为对于大量的试验是不确定的“我们”,我不允许在scipy中使用Log-Likelohood的内置函数)