This chapter provides a comprehensive introduction to the quantum mechanical treatment of orbital angular momentum. We will derive the operators for angular momentum and solve the corresponding eigenvalue problem, which is fundamental to understanding the behavior of many quantum systems, including the hydrogen atom.
The specific goals for this chapter are:
Derive the quantum mechanical operator for orbital angular momentum, \(\hat{\vec L}\), and analyze its key commutation relations.
Employ the method of separation of variables in spherical coordinates to transform the eigenvalue problem into a set of angular ordinary differential equations (ODEs).
Solve these ODEs to determine the quantized eigenvalues of \(\hat L^2\) and its components, and find the corresponding eigenfunctions.
1. Angular Momentum in Cartesian Coordinates
In classical mechanics, the angular momentum is defined as the cross product \[
\vec L = \vec r \times \vec p,
\] with \[
\vec r =
\begin{pmatrix}
x \\ y \\ z
\end{pmatrix},
\quad
\vec p =
\begin{pmatrix}
p_x \\ p_y \\ p_z
\end{pmatrix}.
\]
The cross product gives \[
\vec L =
\begin{pmatrix}
L_x \\ L_y \\ L_z
\end{pmatrix}
=
\begin{pmatrix}
y p_z - z p_y \\
z p_x - x p_z \\
x p_y - y p_x
\end{pmatrix}.
\]
In quantum mechanics, we replace position and momentum by operators:
The angular momentum components are \[
\hat L_x = \hat y \hat p_z - \hat z \hat p_y, \qquad
\hat L_y = \hat z \hat p_x - \hat x \hat p_z, \qquad
\hat L_z = \hat x \hat p_y - \hat y \hat p_x.
\]
Compute the commutator: \[
\begin{aligned}
{[\hat L_x, \hat L_y]} &= [\hat y \hat p_z - \hat z \hat p_y, \; \hat z \hat p_x - \hat x \hat p_z] \\
&= [\hat y \hat p_z, \hat z \hat p_x]
- [\hat y \hat p_z, \hat x \hat p_z]
- [\hat z \hat p_y, \hat z \hat p_x]
+ [\hat z \hat p_y, \hat x \hat p_z].
\end{aligned}
\]
Expanding and using the canonical commutators \([\hat x_i, \hat p_j] = i\hbar \delta_{ij}\) and \([\hat x_i, \hat x_j] = [\hat p_i, \hat p_j] = 0\):
\([\hat y \hat p_z, \hat z \hat p_x] = \hat y [\hat p_z, \hat z] \hat p_x = -i\hbar \hat y \hat p_x\)
\(-[\hat y \hat p_z, \hat x \hat p_z] = 0\)
\(-[\hat z \hat p_y, \hat z \hat p_x] = 0\)
\([\hat z \hat p_y, \hat x \hat p_z] = \hat x [\hat z, \hat p_z] \hat p_y = i\hbar \hat x \hat p_y\)
Adding the nonzero terms gives \[
[\hat L_x, \hat L_y] = i\hbar (\hat x \hat p_y - \hat y \hat p_x) = i\hbar \hat L_z.
\]
Thus the commutator is verified. The remaining commutators, \([\hat L_y, \hat L_z]\) and \([\hat L_z, \hat L_x]\), can be derived using the same method.
These relations show:
Caution
The three components \(\hat L_x, \hat L_y, \hat L_z\)do not commute.
Thus, there are no eigenstates of the full vector operator\(\hat{\vec L}\).
1.2 Total Angular Momentum
The squared operator is defined as \[
\hat L^2 = \hat L_x^2 + \hat L_y^2 + \hat L_z^2.
\]
Hence, we can find simultaneous eigenstates of \(\hat L^2\) and one component, usually chosen to be \(\hat L_z\).
Code
import matplotlib.pyplot as pltimport numpy as np# Create a new figure and a 3D axisfig = plt.figure(figsize=(10, 8))ax = fig.add_subplot(111, projection='3d')# Set the aspect ratio to 'equal' for better visualizationax.set_box_aspect([1,1,1])# Define the components of the angular momentum vector LLx =3Ly =4Lz =6# The origin of the vectorsorigin = [0, 0, 0]# Plot the angular momentum vector Lax.quiver(*origin, Lx, Ly, Lz, color='red', label=r'$\vec{L}$', arrow_length_ratio=0.15)# Plot the z-component vector Lzax.quiver(*origin, 0, 0, Lz, color='blue', linestyle='--', arrow_length_ratio=0.1)# Plot the x, y, and z unit vectorsax.quiver(*origin, 1, 0, 0, color='gray', arrow_length_ratio=0.3)ax.quiver(*origin, 0, 1, 0, color='gray', arrow_length_ratio=0.3)ax.quiver(*origin, 0, 0, 1, color='gray', arrow_length_ratio=0.3)# Add labels for the unit vectorsax.text(1.2, 0, 0, 'x', color='gray', fontsize=12)ax.text(0, 1.2, 0, 'y', color='gray', fontsize=12)ax.text(0, 0, 1.2, 'z', color='gray', fontsize=12)# Set title# ax.set_title('Quantum Mechanical Angular Momentum Vector', fontsize=16)# Plot the circle of possible endpoints for the L vectorradius = np.sqrt(Lx**2+ Ly**2)theta = np.linspace(0, 2* np.pi, 100)x_circle = radius * np.cos(theta)y_circle = radius * np.sin(theta)z_circle = np.full_like(theta, Lz)ax.plot(x_circle, y_circle, z_circle, color='green', linestyle=':', label='Uncertainty Circle')# Add annotations for vector lengths, adjusted for better visibilitylambda_val = Lx**2+ Ly**2+ Lz**2mu_val = Lzax.text(Lx *0.7, Ly *0.6, Lz *0.4, r'$\sqrt{\lambda}$', color='red', fontsize=14, horizontalalignment='left')ax.text(0.5, 0.5, Lz *0.5, r'$\mu$', color='blue', fontsize=14, horizontalalignment='left')# Set the plot limitsax.set_xlim([-5, 5])ax.set_ylim([-5, 5])ax.set_zlim([0, 7])# Remove background planes and main axes lines, but keep the specific unit vectorsax.set_axis_off()# Remove gridax.grid(False)# Save the plot#plt.savefig('angular_momentum_final.png')plt.show()
Figure 1: Angular momentum eigenvector in quantum mechanics.
2. Angular Momentum Operators in Spherical Coordinates
The angular momentum operators in position representation act on wavefunctions \(\psi(r,\theta,\varphi)\), where \((r,\theta,\varphi)\) are spherical coordinates:
\[
x = r\sin\theta\cos\varphi, \quad
y = r\sin\theta\sin\varphi, \quad
z = r\cos\theta
\]
The squared angular momentum operator also transforms to spherical coordinates. Using the spherical Laplacian \(\nabla^2\) and the fact that \(\hat{L}^2\) acts only on angular variables:
This is the associated Legendre equation. The physically acceptable solutions to this equation are the associated Legendre functions, \(P_\ell^m(x)\) , which are defined in terms of the standard Legendre polynomials\(P_\ell(x)\):
Thus, \(\{Y_\ell^m\}\) forms a complete orthonormal basis for functions on the sphere.
4. Quantization of \(\ell\) and \(m\)
The requirement that the eigenfunctions be single-valued and finite on the sphere leads to restrictions on \(\ell\) and \(m\).
From the \(\varphi\)-dependence:
The solution is \(\Phi(\varphi) = e^{i m \varphi}\).
For this to be single-valued when \(\varphi \to \varphi + 2\pi\), we must have \[
e^{i m (\varphi + 2\pi)} = e^{i m \varphi}.
\] This holds only if \(m \in \mathbb{Z}\) (an integer).
Thus, the magnetic quantum number \(m\) is an integer.
From the \(\theta\)-dependence:
The function \(\Theta(\theta)\) must be finite at the poles (\(\theta=0,\pi\)).
This condition restricts the separation constant to the form \[
\lambda = \hbar^2 \ell(\ell+1),
\] with \(\ell = 0, 1, 2, \dots\).
If \(\ell\) were not an integer, the associated Legendre functions \(P_\ell^m(\cos\theta)\) would diverge or fail to be single-valued.
Thus, the orbital quantum number \(\ell\) must be a non-negative integer.
For each \(\ell\), the allowed \(m\) values are integers satisfying \(-\ell \le m \le \ell\).
This ensures that the associated Legendre functions \(P_\ell^m(\cos\theta)\) remain well-defined and normalizable.
The \(\theta\)-dependence is given explicitly by the associated Legendre functions\(P_\ell^m(\cos\theta)\).
5. Ladder Operators and \(m\)-States
To understand the structure of the angular momentum eigenstates, it is useful to introduce the ladder operators:
\[
\hat{L}_\pm = \hat{L}_x \pm i \hat{L}_y.
\]
These operators act on the eigenstates \(\lvert \ell, m \rangle\) (in Dirac notation, see below) of \(\hat{L}^2\) and \(\hat{L}_z\) in the following way:
\(\hat{L}_+\) raises \(m\) by one unit: \(\; m \mapsto m+1\).
\(\hat{L}_-\) lowers \(m\) by one unit: \(\; m \mapsto m-1\).
Since the maximum value of \(m\) is \(\ell\), applying \(\hat{L}_+\) to \(\lvert \ell, \ell \rangle\) gives zero:
\[
\hat{L}_+ \lvert \ell, \ell \rangle = 0.
\]
Similarly, \(L_-\) annihilates the lowest state \(\lvert \ell, -\ell \rangle\):
\[
\hat{L}_- \lvert \ell, -\ell \rangle = 0.
\]
The ladder operators explain why the possible \(m\) values for a fixed \(\ell\) are restricted to integers in the range \(-\ell, -\ell+1, \dots, \ell - 1, \ell\):
Starting from the top state \(\lvert \ell, \ell \rangle\), repeated applications of \(\hat{L}_-\) generate all the states down to \(\lvert \ell, -\ell \rangle\).
No other values of \(m\) appear, because outside this range the ladder action vanishes.
5.2 Connection to spherical harmonics
In the coordinate-space representation, these ladder operators correspond to differential operators acting on the spherical harmonics \(Y_\ell^m(\theta,\varphi)\):
This provides an algebraic way to generate all spherical harmonics of a given \(\ell\) starting from the “highest-weight” function \(Y_\ell^\ell(\theta,\varphi)\).
6. Explicit Examples
For the lowest values of \(\ell\) and \(m\), the normalized spherical harmonics are:
These functions form the familiar \(s\), \(p\), and \(d\) orbitals in atomic physics.
Code
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Ddef complex_spherical_harmonics_squared(l, m, theta, phi):""" Calculates the absolute square of the normalized complex spherical harmonic Y_l^m(theta, phi). Args: l (int): The orbital quantum number. m (int): The magnetic quantum number. theta (numpy.ndarray): The polar angle (from 0 to pi). phi (numpy.ndarray): The azimuthal angle (from 0 to 2*pi). Returns: numpy.ndarray: The value of |Y_l^m(theta, phi)|^2. """if l ==0and m ==0:return np.full_like(theta, 1.0/ (4.0* np.pi))elif l ==1:if m ==0:return (3.0/ (4.0* np.pi)) * np.cos(theta)**2elifabs(m) ==1:# The e^(i*phi) term squared has a magnitude of 1, so we only# need to square the sine term and the prefactor.return (3.0/ (8.0* np.pi)) * np.sin(theta)**2elif l ==2:if m ==0:return (5.0/ (16.0* np.pi)) * (3.0* np.cos(theta)**2-1.0)**2elifabs(m) ==1:return (15.0/ (8.0* np.pi)) * (np.sin(theta) * np.cos(theta))**2elifabs(m) ==2:return (15.0/ (32.0* np.pi)) * np.sin(theta)**4else:# Return zeros for any other (l,m) pairs not explicitly handled.return np.zeros_like(theta)# Set up the spherical coordinate gridtheta_phi_samples =100theta = np.linspace(0, np.pi, theta_phi_samples)phi = np.linspace(0, 2* np.pi, theta_phi_samples)theta, phi = np.meshgrid(theta, phi)# Define the (l, m) pairs to be plotted, avoiding redundant plots# We only need to plot for m >= 0lm_pairs = [ (0, 0), (1, 0), (1, 1), (2, 0), (2, 1), (2, 2)]# Calculate the squared magnitude for all spherical harmonics and find the global maximumall_R_values = []for l, m in lm_pairs: R = complex_spherical_harmonics_squared(l, m, theta, phi) all_R_values.append(R)# Find the global maximum to normalize all plots to the same scaleR_max =max(np.max(r) for r in all_R_values)# Set up the plot with a grid of subplots (2 rows, 3 columns)fig = plt.figure(figsize=(7, 4.67))# Loop through the pairs and create a subplot for eachfor i, (l, m) inenumerate(lm_pairs): ax = fig.add_subplot(2, 3, i +1, projection='3d')# Set equal aspect ratio for the plot box ax.set_box_aspect([1, 1, 1])# Get the pre-calculated R and normalize it R = all_R_values[i] / np.max(all_R_values[i])#R_maxif (l,m)==(0,0): R = R/1.5# Convert to Cartesian coordinates for plotting x = R * np.sin(theta) * np.cos(phi) y = R * np.sin(theta) * np.sin(phi) z = R * np.cos(theta)# Normalize the R values for color mapping and apply alpha norm = plt.Normalize(vmin=R.min(), vmax=R.max())if (l,m)==(0,0): norm = plt.Normalize(vmin=R.min()-.1, vmax=R.max()+.1) colors = plt.cm.jet(norm(R))# Plot the surface with colors based on the radius and alpha set directly ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=colors, edgecolor='none', alpha=0.8)# Plot the surface, with a solid, uniform color to better show shape# ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='viridis',# edgecolor='none', alpha=0.8)# Manually set the axis limits to be identical across all plots ax.set_xlim([-1, 1]) ax.set_ylim([-1, 1]) ax.set_zlim([-1, 1])# Set titles for each subplot, using the pm symbol where appropriateif m ==0: title =r'$|Y_{'+str(l) +'}^0|^2$'else: title =r'$|Y_{'+str(l) +'}^{\pm '+str(m) +'}|^2$' ax.set_title(title, fontsize=14)# Hide the axes to make the plot cleaner ax.set_axis_off()plt.tight_layout()plt.show()
Figure 2: Absolute square of some spherical harmonics in 3D polar plot.
7. Dirac notation
In Dirac notation, we can label the angular momentum eigenstates as \(\lvert \ell, m \rangle\).
This reminds us that the spherical harmonics \(Y_\ell^m(\theta,\varphi)\) are simply the coordinate-space representation of the abstract states \(\lvert \ell, m \rangle\):
Hence, the two notations are fully consistent:
- The wavefunction view uses functions on the sphere \(Y_\ell^m(\theta,\varphi)\).
- The operator view uses abstract eigenstates \(\lvert \ell, m \rangle\).
Thus, when acting on an eigenstate \(\lvert \ell, m \rangle\) of \(\hat L^2\) and \(\hat L_z\), the operator \(\hat L_\pm\) shifts the magnetic quantum number by one unit:
This shows that \(\hat L_\pm\) (if nonzero) produces another eigenstate with eigenvalue \(m \pm 1\).
So we may write \[
\hat L_\pm \lvert \ell,m \rangle = C_\pm(\ell,m) \lvert \ell, m \pm 1 \rangle,
\] for some coefficient \(C_\pm(\ell,m)\).