Nov-01-2018, 01:49 AM
hi I'm trying to run the following code to solve Schrodinger equation in a infinite well with a barrier in themiddle but when I try to run the code I keep getting this error:
this is the part that I am trying to run
Error:Traceback (most recent call last):
File "C:/.../Desktop/S2.py", line 45, in <module>
psi_b.append(Wave_function(e1)) # for each energy e1 find the the psi(x) at x = b
File "C:/Users/Daniel/Desktop/S2.py", line 28, in Wave_function
psi = odeint(SE, psi0, x)
File "C:...\Python36-32\lib\site-packages\scipy\integrate\odepack.py", line 233, in odeint
int(bool(tfirst)))
RuntimeError: The size of the array returned by func (2) does not match the size of y0 (4)
.can someone tell me where I am getting it wronge on this script? the original code that I am trying to modify is here https://helentronica.com/2014/09/04/quan...he-python/this is the part that I am trying to run
from pylab import *
from scipy.integrate import odeint
from scipy.optimize import brentq
def V(x):
"""
Potential function in the finite square well. Width is L and value is global variable Vo
"""
L = 1
if abs(x) > L:
return 0
else:
return Vo
def SE(psi, x):
state0 = psi[1]
state1 = 2.0*(V(x) - E)*psi[0]
return array([state0, state1])
def Wave_function(energy):
"""
Calculates wave function psi for the given value
of energy E and returns value at point b
"""
global psi
global E
E = energy
psi = odeint(SE, psi0, x)
return psi[-3,-2,-1,0]
N = 1000 # number of points to take
psi = np.array([0, 0, 0, 0, 0, 0])
E = 0.0 # global variable Energy needed for Sch.Eq, changed in function "Wave function"
psi0 = np.array([0,1,1,0])
b = 0 # point outside of well where we need to check if the function diverges
a = 1
a2 = a*2
ba = a2+1
x = linspace(-b, ba, N) # x-axis
Vo = 20
en = linspace(0, Vo, 100) # vector of energies where we look for the stable states
psi_b = [] # vector of wave function at x = b for all of the energies in en
for e1 in en:
psi_b.append(Wave_function(e1)) # for each energy e1 find the the psi(x) at x = b
E_zeroes = find_all_zeroes(en, psi_b) # now find the energies where psi(b) = 0
