"Shooting Method" for simulating a Particle in an Infinite Square Well

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 replies · 4K views
Bassa
Messages
46
Reaction score
1
Hello! I am trying to write a program that solves the Schrödinger 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!

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.

%boundary 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
<Moderator's note: please use code tags>
 

Attachments

  • Screen Shot 2017-03-10 at 2.25.43 PM.png
    Screen Shot 2017-03-10 at 2.25.43 PM.png
    29.2 KB · Views: 816
Last edited by a moderator:
on Phys.org
Bassa said:
In my code below, when I plot psi vs. x_negative, I do not get a wave function that looks like what we expect.
So what do you get?

One thing that bothers me is
Matlab:
psi(1) = 1;
psi(2) = 1;
This is not a valid slope for the wave function. You need to initialize the 2-point recursion with psi(1)≠psi(2).
 
  • Like
Likes   Reactions: aaroman