Я использую гауссовскую квадратуру для оценки интеграла, и я получаю эту ошибку ... Я использовал это раньше, и она отлично работает. Я что-то упустил?
def gaussxw(N):
#Initial approximation to roots of Legendre polynomial
a = linspace(3,4*N-1,N)/(4*N+2)
z=cos(pi*a+1/(8*N*N*tan(a)))
#Find roots using Newton's method
epsilon=1e-15
delta=1.0
while delta>epsilon:
p0=ones(N,float)
p1=copy(z)
for k in range(1,N):
p0,p1 = p1,((2*k+1)*z*p1-k*p0)/(k+1)
dp = (N+1)*(p0-z*p1)/(1-z*z)
dz = p1/dp
z-=dz
delta=max(abs(dz))
#Calculate the weights
w = 2*(N+1)*(N+1)/(N*N*(1-z*z)*dp*dp)
def uncertainty(z,wavefunctionmod):
return 2*(z**2*abs(wavefunctionmod)**2)/(1-z)**4
def wavefunctionmod(z,Hmod): #Creating the wavefunction
return (Hmod*e**(-(z/(1-z))**2/2))/sqrt((2**n)*factorial(n)*sqrt(pi))
def Hmod(n,z): #Function to create the hermite polynomial for some value of 'n'
Hermite=[]
Hermite.append(1)
Hermite.append(2*(z/(1-z)))
for j in range(1,n):
Hermite.append(2*(z/(1-z))*Hermite[j]-2*(j)*Hermite[j-1])
return Hermite[n]
n=int(input("Please enter in a value for n:"))
N=100
a = 0.0
b = 1.0
z,w=gaussxw(N)
zp=0.5*(b-a)*z+0.5*(b+a)
wp=0.5*(b-a)*w
#Perform the integration
s=0.0
for k in range(N):
s+=wp[k]*uncertainty(zp[k],wavefunctionmod(zp[k],Hmod(n,zp[k])))
print(s)
Please enter in a value for n:5
Traceback (most recent call last):
File "Problem3.py", line 132, in <module>
z,w=gaussxw(N)