- #1
Bassa
- 46
- 1
Hello! I am trying to write a program that solves the Schrodinger Equation for a particle in an infinite square well. I did a lot of research regarding the methods that could be used to accomplish this. I am writing this program in Matlab. The method I am using is called the Shooting Method. In my code below, when I plot psi vs. x_negative, I do not get a wave function that looks like what we expect. I am not sure where I am going wrong with this. I also don't know how much details I should include in this thread. Please, ask me for more information if needed. I have also attached picture of the textbook I am using for my logic. It is from the Computational Physics textbook by N. Giordano. Thank you very much for your help!
<Moderator's note: please use code tags>
Matlab:
clear;
clc;
%declaring variables
psi = zeros(1,200); %Wave function
dx = 0.01; %x steps
V = 1000; %potential outside the well
e = 3; %initial guess energy
de = -.6; %energy step-size.
%boundry conditions
psi(1) = 1;
psi(2) = 1;
last_diverge = 0; %keeping track of the curvature of the wave function
flag = 't'; %variable to control the while loop below
while flag == 't'
%this for loop needs to be nested in another loop
for k = 2:length(psi)-1
%defining the potential funtion of the well
if abs(k*dx) <= 1
potential = 0;
else
potential = V;
end
psi(k+1) = 2*psi(k) - psi(k-1) - 2*(e - potential)*(dx^2)*psi(k);
%if psi exceeds the maximum magnitude, then exit the loop
if psi(k+1) > 2
break;
end
end
%plotting the left side of the wave function
f = 1;
for n = -k:0
x_negative(f) = n*dx;
f = f + 1;
end
%asking the user if they want to estimate more
flag = input('Enter (t) if you would like to continue finding the solution: ','s');
%updating the curvature of the wave function
if psi(k+1) > 0
diverge = 1;
else
diverge = -1;
end
if diverge * last_diverge < 0
de = -(de/2);
end
e = e + de;
last_diverge = diverge;
end
Attachments
Last edited by a moderator: