W klasycznej fizyce, oscylator harmoniczny opisywany jest przez hamiltonian:
\begin{equation}
\mathcal{H} = \frac{p^{2}}{2m} + \frac{1}{2}m\omega^{2}q^{2}
\tag{1}
\end{equation}
gdzie \(q\) jest położeniem kanonicznym, natomiast \(p\) jest pędem kanonicznym. W mechanice kwantowej, funkcję energii musimy zastąpić odpowiadającym jej operatorem energii, a dokonuje się to przez podstawienie \(q \rightarrow Q\) oraz \(p\rightarrow P\), gdzie \(P,Q\) są operatorami, z komutatorem: \([Q,P] = i\hbar\). Operator energii \(H\) (hamiltonian), możemy zatem zapisać jako:
\begin{equation}
H = \frac{P^{2}}{2m} + \frac{1}{2}m\omega^{2}Q^{2}
\tag{2}
\end{equation}
Hamiltonian taki możemy zdiagonalizować przez wprowadzenie operatorów kreacji i anihilacji:
\begin{equation}
a = \sqrt{\frac{m\omega}{2\hbar}}(Q + \frac{i}{m\omega}P)
\tag{3}
\end{equation}
\begin{equation}
a^{\dagger} = \sqrt{\frac{m\omega}{2\hbar}}(Q – \frac{i}{m\omega}P)
\tag{4}
\end{equation}
których komutator wynosi:
\begin{equation}
[a,a^{\dagger}] = I
\tag{5}
\end{equation}
Wtedy, w takiej reprezentacji, nasz hamiltonian przyjmuje postać:
\begin{equation}
H = \hbar\omega (a^{\dagger}a + \frac{1}{2})
\tag{6}
\end{equation}
co łatwo sprawdzić, przez wyrażenie operatorów \(Q,P\) przez operatory \(a, a^{\dagger}\) i podstawienie ich do hamiltonianu. Otrzymany operator możemy zdiagonalizować w kilku krokach.
Mając już znalezioną reprezentacje stanów \(|{n}\) w postaci abstrakcyjnej, jesteśmy w stanie wyznaczyć ich postać reprezentacji położeniowej. W ogólności można to zrobić metodą analityczną, korzystając z własności funkcji Hermite’a, ale w tym wypadku ograniczymy się jedynie do wyliczenia ścisłej postaci stanu próżni, a następne stany, o wyższych energiach, otrzymamy przez podniesienie stanu zerowego, operatorem kreacji.
Zauważmy, że
\begin{equation}
a|{0}\rangle = \sqrt{\frac{m\omega}{2\hbar}}(Q + \frac{i}{m\omega}P)|{0}\rangle = 0
\tag{14}
\end{equation}
co w reprezentacji położeń przyjmuje postać:
\begin{equation}
(q + \frac{1}{m\omega}\frac{d}{dq}) \psi_{0}(q) = 0
\tag{15}
\end{equation}
Równanie różniczkowe to, ma prostą postać rozwiązania:
\begin{equation}
\psi_{0}(q) = (\frac{m\omega}{\pi})^{1/4}\exp(-\frac{m\omega}{2}q^{2})
\tag{16}
\end{equation}
gdzie stałą całkowania zastapiliśmy czynnikiem normalizacyjnym, obliczonym przez skorzystanie z warunku:
\begin{equation}
\int_{-\infty}^{+\infty} |\psi_{0}(q)|^{2}dq = 1
\tag{17}
\end{equation}
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm import seaborn as sns # definiujemy operator kreacji def create(m, omega): def inner(y, x): dy_dx = np.gradient(y, x) return (1 / np.sqrt(2 * m * omega)) * (-dy_dx + m * omega * x * y) return inner # ustalamy parametry ukladu m = 1 om = 1.6 q_ = np.arange(-7,7, 0.01) # obliczamy tablice wartosci stanu podstawowego psi0 = (m * om / np.pi) ** 0.25 * np.exp(- (om * m * (q_ ** 2)) / 2) # deklarujemy operator kreacji a_dag = create(m, om) # procedura tworzenia wykresu fig = plt.figure(figsize=(5, 4)) ax = fig.add_subplot(1, 1, 1) n = 8 actual = psi0 fact_ = 1 for i in range(n): ax.plot(q_, actual + i * om, color=cm.rainbow(i / n), label=f'n={i}', lw = 3) actual = a_dag(actual, q_) / np.sqrt(i + 1) V_ = m * om ** 2 * q_ ** 2 / 2 ax.plot(q_, V_, color="blue", alpha=0.3, label="V(x)") ax.fill_between(q_, 0, V_, color="blue", alpha=0.1) ax.set_ylim(-0.1, n * om) ax.set_title("Funkcje własne oscylatora harmonicznego") ax.legend(loc = "upper right") ax.set_ylabel("E") ax.set_xlabel("x") plt.show()
Powyższy kod pozwala nam na obliczenie numerycznie dowolnie wybranej liczby funkcji własnych oscylatora harmonicznego, przez działanie na stan podstawowy operatorem kreacji. Na rysunku zamieszczono wykres funkcji własnych oscylatora.