E8.2A quantum particle in a gravitational field
Consider a particle of mass \(m\) moving in a constant gravitational field such that its potential energy at a height \(z\) above a surface is \(mgz\). If the particle bounces elastically on the surface, the classical probability density corresponding to its position is
where \(z_\mathrm{max}\) is the maximum height it reaches.
The quantum mechanical behaviour of this system may described by the solution to the time-independent Schrödinger equation,
which is simplified by the coordinate rescaling \(q = z/\alpha\) where \(\alpha =(\hbar^2 / 2m^2g)^{1/3}\):
The solutions to this differential equation are the Airy functions. The boundary condition \(\psi(z)\rightarrow 0\) as \(z\rightarrow \infty\) specifically gives:
where \(N_E\) is a normalization constant.
The second boundary condition, \(\psi(q=0) = 0\), leads to quantization in terms of a quantum number \(n=1,2,3,\cdots\), with scaled energy values \(q_E\) found from the zeros of the Airy function: \(\mathrm{Ai}(-q_E) = 0\).
The following program plots the classical and quantum probability distributions, \(P_\mathrm{cl}(z)\) and \(|\psi(z)|^2\), for \(n=1\) and \(n=16\).
import numpy as np
from scipy.special import airy, ai_zeros
import matplotlib.pyplot as plt
nmax = 16
# Find the first nmax zeros of Ai(x)
a, _, _, _ = ai_zeros(nmax)
# The actual boundary condition is Ai(-qE) = 0 at q=0, so:
qE = -a
def prob_qm(n, dq):
"""
Return the quantum mechanical probability density for a particle moving
in a uniform gravitational field.
"""
# The quantum mechanical wavefunction is proportional to Ai(q-qE) where
# the qE corresponding to quantum number n is indexed at n-1
psi, _, _, _ = airy(q - qE[n - 1])
# Return the probability density, after rough-and-ready normalization
P = psi**2
return P / (sum(P) * dq)
def prob_cl(n):
"""
Return the classical probability density for a particle bouncing
elastically in a uniform gravitational field.
"""
# The classical probability density is already normalized
return 0.5 / np.sqrt(qE[n - 1] * (qE[n - 1] - q))
# The ground state, n=1
q, dq = np.linspace(0, 4, 1000, retstep=True)
plt.plot(q, prob_cl(1), label="Classical")
plt.plot(q, prob_qm(1, dq), label="Quantum")
plt.ylim(0, 0.8)
plt.xlabel("$q$")
plt.ylabel("$P(q)$")
plt.legend()
plt.title("$n=1$")
plt.show()
# An excited state, n=16
q, dq = np.linspace(0, 20, 1000, retstep=True)
plt.plot(q, prob_cl(16), label="Classical")
plt.plot(q, prob_qm(16, dq), label="Quantum")
plt.ylim(0, 0.25)
plt.xlabel("$q$")
plt.ylabel("$P(q)$")
plt.legend(loc="upper left")
plt.title("$n=16$")
plt.show()
- We use
scipy.special.ai_zerosto retrieve the \(n=1\) and \(n=16\) eigenvalues. scipy.special.airyfinds the corresponding wavefunctions and hence probability densities.- For the sake of illustration, these are normalized approximately by a very simple numerical integration.