下面是代码,我使用的是python3.5
from scipy.optimize import fsolve
from scipy.integrate import dblquad
from numpy import sqrt,cos,pi,absolute
Ueh=2320.5
Uhh=2192.5
ED=120
LCP=-59.28179796
UCP=-58.96721714
def Ih(mu,x):
var,err= dblquad(lambda ky, kx: 1/sqrt((ED-mu-2540*(2-cos(kx)-cos(ky)))**2+x**2)/8/pi/pi, -pi, pi, lambda kx:-pi,lambda kx: pi)
return var
def Ie(mu,x):
var,err= dblquad(lambda ky, kx: 1/sqrt((2540*(2-cos(kx)-cos(ky))-mu)**2+x**2)/8/pi/pi, -pi, pi, lambda kx:-pi,lambda kx: pi)
return var
def spp(mu,p):
x, y = p
return (absolute(x)-2*Ueh*absolute(y)*Ih(mu,y),4*Ueh**2*Ie(mu,x)*Ih(mu,y)/(1+Uhh*Ih(mu,y))-1)
def spm(mu,y):
return Uhh*Ih(mu,y)-1
def sis(mu,p):
x,y=p
return(Uhh*Ih(mu,y)-1, Ie(mu,x)*2*Ueh**2/Uhh-1)
def solution(mu):
if mu<=LCP:
Dele=0
Delh=fsolve(lambda y:spm(mu,y),4)
phase=0
elif mu> LCP and mu<UCP:
Dele,Delh=fsolve(lambda p: sis(mu,p),(4,4))
phase=-Uhh/2/Ueh*Dele/Delh
elif mu>=UCP:
Dele,Delh=fsolve(lambda p: spp(mu,p),(9,4))
phase=-1
return Dele,Delh,phase
如果取mu=-60,然后取mu<;=LCP
^{pr2}$如果我在另外两个elif中带mu,则返回无数组
print(solution(-59))
(8.2553379473241311, 4.1210736864119193, -0.94635157721569463)
print(solution(-58))
(8.9677408867771558, 4.2580061198120394, -1)
如何更改它,使第一个返回的格式与其他两个相同?我知道我可以从数组中取[0]来得到数字。如果我能理解第一种情况下fsolve返回数组的原因是什么,那就更好了?在
目前没有回答
相关问题 更多 >
编程相关推荐