PROGRAM eigen CALL parameters(V0,a,xmax,dx) CALL plot_potential(V0,a,xmax) CALL Euler(V0,a,dx,xmax) END SUB parameters(V0,a,xmax,dx) INPUT prompt "magnitude of well depth = ": V0 INPUT prompt "half width of well = ": a INPUT prompt "step size = ": dx INPUT prompt "maximum value of x to be plotted = ": xmax END SUB SUB plot_potential(V0,a,xmax) ! draw potential well OPEN #1: screen 0,1,0,0.4 SET COLOR "red" SET WINDOW -1.05*xmax,1.05*xmax,-1.1*V0,1.1*V0 PLOT LINES: -xmax,0;-a,0; ! horizontal line PLOT LINES: -a,0;-a,-V0 ! vertical line PLOT LINES: -a,-V0;a,-V0;a,-V0;a,0;a,0;xmax,0 END SUB SUB Euler(V0,a,dx,xmax) DECLARE DEF V OPEN #2: screen 0,1,0.4,1 SET WINDOW -1.01*xmax,1.01*xmax,-4,4 INPUT prompt "even or odd parity (1 or -1) = ": parity CLEAR DO INPUT prompt "E = ": E IF E = 0 then EXIT SUB SET COLOR "blue" IF parity = -1 then LET phi = 0 ! initial values at x = 0 LET dphi = 1 ! first derivative ELSE LET phi = 1 LET dphi = 0 END IF LET x = 0 DO ! compute wave function LET x_old = x LET phi_old = phi LET x = x + dx LET d2phi = 2*(V(x,V0,a) - E)*phi ! dimensionless units LET dphi = dphi + d2phi*dx ! Euler-Cromer algorithm LET phi = phi + dphi*dx ! plot wave function PLOT LINES: x_old,phi_old; x,phi PLOT LINES: -x_old,phi_old*parity; -x,phi*parity LOOP until x > xmax SET COLOR "black" LOOP END SUB DEF V(x,V0,a) ! potential function V(x) IF abs(x) > a then LET V = V0 ELSE LET V = 0 END IF END DEF