Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

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

  1. Mar 10, 2017 #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!

    Code (Matlab M):

    %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;
                potential = V;
            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
        %plotting the left side of the wave function
        f = 1;
        for n = -k:0
            x_negative(f) = n*dx;
            f = f + 1;
        %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;
            diverge = -1;
        if diverge * last_diverge < 0
            de = -(de/2);
        e = e + de;
        last_diverge = diverge;
    <Moderator's note: please use code tags>

    Attached Files:

    Last edited by a moderator: Mar 10, 2017
  2. jcsd
  3. Mar 10, 2017 #2


    User Avatar

    Staff: Mentor

    So what do you get?

    One thing that bothers me is
    Code (Matlab M):

    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).
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted