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

In summary, the conversation discusses the development of a program in Matlab to solve the Schrodinger Equation for a particle in an infinite square well using the Shooting Method. The code includes variables for the wave function, x steps, potential, and energy, as well as boundary conditions. However, when plotting the wave function, it does not match the expected result and the user is unsure where the error lies. They also mention a textbook by N. Giordano that they are using for reference.
  • #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!

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
<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: 745
Last edited by a moderator:
Technology news on Phys.org
  • #2
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 aaroman

Similar threads

Replies
1
Views
308
Replies
7
Views
2K
Replies
39
Views
11K
Replies
4
Views
1K
Replies
1
Views
980
Replies
22
Views
1K
Replies
2
Views
1K
Back
Top