I am working on solving the time-independent Schrodinger equation using the method of finite differences. This approach has been discussed previously on this site (here, for instance). My code is written in Mathematica and is able to reproduce the energy eigenvalues and wavefunctions for a 1D particle-in-a-box and the harmonic oscillator.
When I take the particle-in-a-box potential and add in a large barrier in the middle third of the box, such that $$ V(x) = \begin{cases} 0, & 0 < x < \frac{1}{3} \text{ and } \frac{2}{3} < x < 1 \\ 2000, & 1/3 \leq x \leq 2/3 \\ \infty, & \text{otherwise} \end{cases}$$
I get an interesting result. The solutions appear to be particle-in-a-box wavefunctions that are constrained to exist in either the left or right partitions (see picture below). Now, I know that quantum tunneling causes some probability density to leak through, but I don't believe that this is important. The oddity is that the wavefunctions come in pairs, and their energy eigenvalues appear to be pair-wise degenerate.
According to problem 2.44 in the third edition of Quantum Mechanics (Griffiths and Schroeter), the 1-D Schrodinger equation does not permit degenerate eigenvalues for linearly-independent solutions. There are a few assumptions that go into the derivation, one of which is that the solutions approach 0 as $x \rightarrow \infty$. This is certainly the case here, and $\psi_1$ and $\psi_2$ are definitely linear-independent.
With all of that said, where is the issue? Is the theorem wrong? Am I not accounting for an assumption that is violated in this problem? Or does it have to do with some voodoo relating to the indistinguishability of electrons or entanglement? Or perhaps the solutions are linearly-dependent in phase space, and Griffiths over-simplified the wording of the theorem?
Either way, I'd love some insight.
EDIT:
I may have found the reason. When I force Mathematica to compute the eigenvalues using infinite precision, then I get symmetric or antisymmetric wavefunctions, as expected. I only tried this for small matrix sizes (50), and will try to confirm with a larger size.
Here's my Mathematica code. I apologize if it is messy. I am a python programmer and did just enough to get this thing to run:
(* Matrix size *)
n = 100;
(* Range = 0 < x < a *)
a = 1;
(* Calculate \[CapitalDelta]x *)
\[CapitalDelta]x = a / (n + 1);
(* Specify \[Nu](x) = V / \[Lambda] where V = potential function and \
\[Lambda] = \[HBar]^2/(2m(\[CapitalDelta]x)^2) *)
\[Nu][x_] = If[x <= a/3 || x >= 2 a/3, 0, 2000];
(* Create and populate array. *)
data = Array[0 &, {n, n}];
For[i = 0, i < n, i++,
For[j = 0, j < n, j++,
If [i == j,
data[[i + 1, j + 1]] = 2 + \[Nu][(j + 1) * \[CapitalDelta]x ] , 0];
If [j == i - 1 || j == i + 1, data[[i + 1, j + 1]] = -1, 0];
]
]
N[data] // MatrixForm;
(* Find all eigenvectors and eigenvalues. Sort them by ascending \
energy values *)
eigensystem = Eigensystem[data, -n];
eigensystem = Transpose@SortBy[Transpose[eigensystem], First];
(* Define state. k = 1 represents ground state *)
k = 3;
(* Extract energy value. *)
energy = \[HBar]^2/(2 m (\[CapitalDelta]x)^2)*eigensystem[[1]][[k]]
N[energy]
(* Extract eigenvector of choice (and append 0 in beginning and end *)
eigenvector = Insert[eigensystem[[2]][[k]], 0.0, {{1}, {n + 1}}];
(* Plot potential, wavefunction, and probability density *)
plot1 = Thread[{Subdivide[a, n + 1], eigenvector}];
plot2 = Thread[{Subdivide[a, n + 1], eigenvector^2}];
GraphicsRow[{Plot[\[Nu][x], {x, 0, a}, PlotRange -> All],
ListLinePlot[plot1, PlotRange -> All],
ListLinePlot[plot2, PlotRange -> All]}, ImageSize -> 1000]
(* Plot a range of wavefunctions and probability densities *)
kstart = 1;
kend = 4;
GraphicsRow[
Table[ListLinePlot[
Thread[{Subdivide[a, n + 1],
Insert[eigensystem[[2]][[i]], 0.0, {{1}, {n + 1}}]}],
PlotRange -> All], {i, kstart, kend}], ImageSize -> 1500]
GraphicsRow[
Table[ListLinePlot[
Thread[{Subdivide[a, n + 1],
Insert[eigensystem[[2]][[i]]^2, 0.0, {{1}, {n + 1}}]}],
PlotRange -> All], {i, kstart, kend}], ImageSize -> 1500]
```