QM 1D energy eigenstates
Author: R. Tobin

This interactive application integrates the time-independent Schrodinger equation.

You can select and adjust various potential energy functions, choose the symmetry of the desired solution, and adjust the energy of the state. Acceptable quantum bound states must go asymptotically to zero in the classically forbidden regions at large positive and negative x. Adjust the energy until that condition is (approximately) reached to find the energy eigenvalues and eigenstates.

Square

Linear

Harmonic

Double square

Even

Scaling

Odd

POTENTIAL

WAVE FUNCTION

Show classical turning points

x 10^

Separation = 1 (slider from 0 to 10, step 0.1)
edge = 0.02
Vscale = 1 (slider from 0.1 to 20, step 0.1)
Width = 2 (slider from 0.2 to 5, step 0.1)
Cent: (Separation + Width) / 2
C: ((-Width) / 2, Vscale)
e = false
d = false
c = true
Double(x) = Vscale * (1 - 1 / (1 + ℯ^((abs(x - Cent) - Width / 2) / edge)) - 1 / (1 + ℯ^((abs(x + Cent) - Width / 2) / edge)))
Square(x) = Vscale * (1 - 1 / (1 + ℯ^((abs(x) - Width / 2) / edge)))
Vscale_1: Vscale
Linear(x) = Vscale_1 * abs(x)
SHO(x) = 0.25 * Vscale_1 * x^(2)
V = If(c, SHO, If[d, Linear, If[e, Square, Double]])
Coarse = 1.5 (slider from 0 to 20, step 0.1)
Fine = 0 (slider from -0.5 to 0.5, step 0.01)
E: Coarse + Fine
M: (0, E)
m = OrthogonalLine(M, yAxis)
f = false
A = Intersect(V, m, (-2.4494897431343987, 1.5000000004301557))
a = false
Even_1: a
Vindex = 2
CTP = If(e, Width / 2, If[f, Width + Separation / 2, x(A)])
Symm = If(Even_1 ≟ true, 1, -1)
Psiscale_1 = 1
Scale = 1 (slider from 0.1 to 10, step 0.1)
b = true
Odd_1: b
Range = 2 (slider from 1 to 10, step 0.5)
dx = 0.05
text3: "ENERGY = " + E + ""
B: ((-Width) / 2, 0)
D: (Width / 2, 0)
F: (Width / 2, Vscale)
G: ((-Separation) / 2 - Width, 0)
H: ((-Separation) / 2 - Width, Vscale)
Vscale_2: Vscale
B_1: ((-Width) / 2, 0)
C_1: ((-Width) / 2, Vscale)
D_1: (Width / 2, 0)
F_1: (Width / 2, Vscale)
G_1: ((-Separation) / 2, 0)
H_1: ((-Separation) / 2, Vscale)
Vscale_3: Vscale
Vscale_4: Vscale
G_2: (Separation / 2, 0)
H_2: (Separation / 2, Vscale)
Vscale_5: Vscale
B_2: ((-Width) / 2, 0)
C_2: ((-Width) / 2, Vscale)
D_2: (Width / 2, 0)
F_2: (Width / 2, Vscale)
G_3: (Separation / 2 + Width, 0)
H_3: (Separation / 2 + Width, Vscale)
Vscale_6: Vscale
B_3: ((-Width) / 2, 0)
C_3: ((-Width) / 2, Vscale)
D_3: (Width / 2, 0)
F_3: (Width / 2, Vscale)
Vscale_7: Vscale
Vscale_8: Vscale
I: (-CTP, 0)
J: (-CTP, 2 * E)
j = Segment(I, J)
k = true
K: (CTP, 0)
L: (CTP, 2 * E)
l = Segment(K, L)
Power = 0 (slider from -10 to 10, step 1)
Scale1: Scale * 10^(Power)
loc8 = SolveODE(0, E - V(x), E^(2) - V(x) * E, 0, E + Scale1, 0, Range * CTP, dx)
loc6 = SolveODE(0, E - V(x), E^(2) - V(x) * E, 0, E + Scale1, 0, -Range * CTP, -dx)
loc3 = SolveODE(0, E - V(x), E^(2) - E * V(x), 0, E, Scale1, Range * CTP, 0.02)
loc1 = SolveODE(0, E - V(x), E^(2) - E * V(x), 0, E, Scale1, -Range * CTP, -dx)