Почему я получаю эту ошибку "невозможно распаковать не повторяемый объект NoneType"? - PullRequest
0 голосов
/ 29 февраля 2020

Я использую гауссовскую квадратуру для оценки интеграла, и я получаю эту ошибку ... Я использовал это раньше, и она отлично работает. Я что-то упустил?

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)

1 Ответ

0 голосов
/ 29 февраля 2020

gaussxw() не возвращает значение, что означает, что оно вернет None неявно.

Затем вы пытаетесь распаковать это значение None в z, w (z,w=gaussxw(N)). за ошибку, потому что нет двух значений для распаковки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...