我的代码的某些部分生成大的int数,这在其他计算中进一步使用。这个数字是通过调用阶乘函数生成的。因为在其他计算中,涉及浮点数和大的int,所以我收到错误说
“OverflowError:long int太大而无法转换为float”。
有没有办法解决这个限制? 在这里,我附上了我的代码。
import numpy as np
#=============================alpha
def alpha(li,dtype=float):
ai=1.0
for mi in range(1,li+1):
ai=ai*(1-(1/(2.0*mi)))
return ai
def gamma(li,dtype=int):
return np.power(np.exp(1)/li,li)*(np.math.factorial((li)))
def J1J2(xi,deltai,dtype=int):
xii=np.abs(xi)
j1i=np.power(np.abs(xii-deltai),2.0)
j2i=np.power(np.abs(xii+deltai),2.0)
return int(np.floor(j1i)),int(np.ceil(j2i))
#========================***********
def R(Xi,sigmai,ni,dtype=float):
ui=Xi/sigmai
a1i=np.power(np.exp(1)/ni,ni)
a2i=np.power(ui,2.0*ni)
a3i=(np.power(ui,2.0))
a4i=np.exp(-a3i)
ri=a1i*a2i*a4i
return ri
def R1(Xi,sigmai,ni,dtype=float):
ui=1.0*Xi/sigmai
ri=np.exp(-2.0*np.power(ui-np.sqrt(ni),2.0))
return ri
def Sumpro(xi,ni,sigmai,a1i,a2i,dtype=float):
Sum=0.0
for li in (a1i,a2i):
Sum=Sum+(alpha(li)/gamma(np.abs(ni-li)))*R(xi,sigmai,np.abs(ni-li))
return 2.0*gamma(ni)*Sum
def Xmatrix(Xi,sigmai,Kxi,Nxi,deltai,dtype=float):
Xmati=np.zeros((Kxi,Nxi),dtype=float)
for i in range(Nxi):
xi=1.0*Xi[i]
ui=xi/sigmai
J1i,J2i=J1J2(ui,deltai)
print(i,' ',J1i,J2i)
Xmati[0:J1i,i]=1
for j in range(J1i,J2i):
print(j )
Xmati[j,i]=Sumpro(xi,j,sigmai,np.abs(J1i),np.abs(j))
return Xmati
def Xmatrix1(Xi,sigmai,Kxi,Nxi,deltai,dtype=float):
Xmati=np.zeros((Kxi,Nxi),dtype=float)
for i in range(Nxi):
xi=1.0*Xi[i]
ui=xi/sigmai
ni=int(np.floor(np.sqrt(np.abs(ui))))
J1i,J2i=J1J2(ui,deltai)
Xmati[ni,i]=Sumpro(xi,ni,sigmai,np.abs(J1i),np.abs(ni))
return Xmati
x=np.linspace(10.0,100.0,50)
X=Xmatrix1(x,1,100,50,np.exp(-1.05))