Angular Momenta and Their Couplings

Author

Daniel Fischer

Introduction

This chapter provides an overview of the fundamental rules governing angular momentum in quantum mechanics and their coupling schemes. More specific applications — such as spin–orbit coupling, hyperfine structure, and total angular momentum in atoms — are discussed in other chapters of these notes (links to follow).

The goal here is to summarize the general principles that apply to any type of quantum-mechanical angular momentum.


In the following, we will work with angular momentum vectors such as \(\vec{j}\), or in the case of coupled systems, \(\vec{J}\), \(\vec{j}_1\) and \(\vec{j}_2\). Each \(\vec{j}\) can represent any type of angular momentum — orbital \((\ell)\), spin \((s)\), or total \((J, F, \dots)\) — whether it takes integer or half-integer values.

In short: This section focuses on the rules and algebra of angular momenta. Later sections will show how these rules are applied in specific physical contexts.


1. Eigenvalue Relations

Angular momentum in quantum mechanics is represented by an operator vector

\[ \hat{\vec{j}} = (\hat{j}_x,\, \hat{j}_y,\, \hat{j}_z), \]

whose components satisfy the angular momentum commutation relations

\[ [\hat{j}_x, \hat{j}_y] = i\hbar\, \hat{j}_z, \qquad [\hat{j}_y, \hat{j}_z] = i\hbar\, \hat{j}_x, \qquad [\hat{j}_z, \hat{j}_x] = i\hbar\, \hat{j}_y. \]


1.1 The Operators \(\hat{j}^2\) and \(\hat{j}_z\)

From these relations we define two particularly important operators:

  • The total angular momentum operator

    \[ \hat{j}^2 = \hat{j}_x^2 + \hat{j}_y^2 + \hat{j}_z^2, \]

  • and the \(z\)-component operator

    \[ \hat{j}_z. \]

These two operators commute,

\[ [\hat{j}^2, \hat{j}_z] = 0, \]

which means they can be simultaneously diagonalized. Consequently, the eigenstates of angular momentum are characterized by two quantum numbers, \(j\) and \(m_j\), as we will see in the following section.


1.2 Eigenvalue Equations

The eigenvalue relations are

\[ \hat{j}^2 |j, m_j\rangle = \hbar^2\, j(j+1)\, |j, m_j\rangle, \]

\[ \hat{j}_z |j, m_j\rangle = \hbar\, m_j\, |j, m_j\rangle. \]

Here:

  • \(j\) determines the magnitude of the angular momentum,
    taking the values
    \[ j = 0, \tfrac{1}{2}, 1, \tfrac{3}{2}, 2, \dots \]

  • \(m_j\) determines the projection of \(\hat{\vec{j}}\) along the \(z\)-axis,
    with possible values
    \[ m_j = -j, -j+1, \dots, +j. \]

Each value of \(j\) therefore corresponds to \(2j + 1\) possible states, forming what is often called a multiplet.


1.3 Physical Interpretation

In this formalism:
- \(\hat{j}^2\) measures the total magnitude of the angular momentum,
- \(\hat{j}_z\) measures the component of that angular momentum along a chosen quantization axis.

Although \(\vec{j}\) is represented as a vector operator, it does not correspond to a definite geometric direction — only its magnitude and one component can be specified simultaneously.


Example:
For \(j = 1\), there are three states \(m_j = -1, 0, +1\).
For \(j = \tfrac{1}{2}\), there are two states \(m_j = -\tfrac{1}{2}, +\tfrac{1}{2}\).
These two cases correspond, respectively, to a spin-1 system (such as a photon) and a spin-\(\tfrac{1}{2}\) system (such as an electron).

Code
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.spatial.transform import Rotation as R # Used for rotating vectors

plt.rcParams['text.usetex'] = True
plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.size'] = 15



# --- Define Constants and Initial (Un-rotated) Vectors in the Jz basis ---
j = 3
m_arr = np.arange(-j, j + 1, 1)

# J0 is along the z-axis, with magnitude sqrt(j(j+1))
# sqrt(3 * 4)
J0 = np.array([0, 0, np.sqrt(j * (j + 1))])

# Apply a fixed Euler rotation to move the entire system to an arbitrary 
# position for a more engaging 3D visualization.
def r_euler(jvec,m):
    if (np.abs(m) <= j and np.linalg.norm(jvec) != 0):        
        return R.from_euler('xyz', [0, -np.arccos(m/np.linalg.norm(jvec))*180/np.pi, 0], degrees=True).apply(jvec)
    else:
        return np.array([0,0,0])


# Apply the rotation to all vectors
#L = r_euler.apply(L0)
#S = r_euler.apply(S0)

def unit(v):
    """Returns the unit vector."""
    norm = np.linalg.norm(v)
    if norm < 1e-10:
        return np.zeros_like(v)
    return v / norm

# --- Plot setup ---
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection="3d")

def draw_vector(r, v, color, label):
    """Draws a vector starting at position r with components v."""
    ax.quiver(r[0], r[1], r[2], v[0], v[1], v[2],
              color=color, lw=1.2, arrow_length_ratio=0.1)
    
    # Add text label slightly offset from the vector tip
    ax.text(r[0]+v[0]*1.1, r[1]+v[1]*1.1, r[2]+v[2]*1.1, label, color=color, fontsize=12)




# z axis
ax.quiver(0, 0, -4, 0, 0, 8, color='k', lw=.6, arrow_length_ratio=0.03)
ax.text(0.2, 0, 4, s=f'$z$', ha='right', color='k', fontsize=12)




# --- Precession cones ---
def plot_cone(axis, angle, height, color, alpha=0.3, resolution=40):
    """
    Plots a cone whose axis is aligned with the given vector 'axis'.
    The cone is centered at the origin.
    """
    axis = unit(axis)
    # Generate points for a cone aligned with the global z-axis
    theta = np.linspace(0, 2 * np.pi, resolution)
    z = np.linspace(0, height, resolution)
    theta, z = np.meshgrid(theta, z)
    r = z * np.tan(angle)
    x = r * np.cos(theta)
    y = r * np.sin(theta)

    # Rotation matrix: align z-axis to the custom 'axis'
    def rotation_matrix(u):
        u = unit(u)
        z = np.array([0, 0, 1])
        v = np.cross(z, u)
        c = np.dot(z, u)
        # Handle parallel/anti-parallel case
        if np.linalg.norm(v) < 1e-10:
            if c < 0:
                return np.diag([1, -1, -1]) # 180 deg flip for anti-parallel
            return np.eye(3) # No rotation needed
        
        # Rodrigues' formula for arbitrary axis rotation
        vx = np.array([[0, -v[2], v[1]],
                       [v[2], 0, -v[0]],
                       [-v[1], v[0], 0]])
        R = np.eye(3) + vx + vx @ vx * (1 / (1 + c))
        return R

    R_mat = rotation_matrix(axis)
    
    # Rotate the cone coordinates
    xyz = R_mat @ np.vstack([x.flatten(), y.flatten(), z.flatten()])
    x_rot = xyz[0].reshape(x.shape)
    y_rot = xyz[1].reshape(x.shape)
    z_rot = xyz[2].reshape(x.shape)

    ax.plot_surface(x_rot, y_rot, z_rot, color=color, alpha=alpha, linewidth=0, shade=True)

def plot_disk(axis, radius, color, alpha=0.3, resolution=40):
    """
    Plots a disk in the xy-plane of a 3D axes object.
    """
    # Generate polar coordinates for the disk
    phi = np.linspace(0, 2 * np.pi, resolution)
    r = np.linspace(0, radius, resolution)
    phi, r = np.meshgrid(phi, r)
    
    # Convert polar to Cartesian coordinates
    x = r * np.cos(phi)
    y = r * np.sin(phi)
    z = np.zeros_like(x) # Z-coordinate is constant at 0 for the xy-plane
    
    # Plot the surface
    ax.plot_surface(x, y, z, color=color, alpha=alpha, linewidth=0, shade=True)



for m in m_arr:
    J = r_euler(J0,m)
    draw_vector(np.zeros(3), J, "green", r"$\vec{j}$") # J starts at origin
    ax.plot([J[0],0], [J[1],0], [J[2],J[2]], linewidth=0.5, linestyle='--', color='k')
    ax.text(0.2, 0, J[2]-0.1, s=f'${m} \hbar$', ha='right', color='k', fontsize=12)
    angle_Jz = np.arccos(J[2] / np.linalg.norm(J))
    if (m==0):
        plot_disk([0, 0, 1], np.linalg.norm(J), "green", alpha=0.15)
    else:
        plot_cone([0, 0, 1], angle_Jz, m, "green", alpha=0.15)


max_extent = 2.5

ax.set_xlim([-max_extent, max_extent])
ax.set_ylim([-max_extent, max_extent])
ax.set_zlim([-max_extent, max_extent])

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.grid(False) 
ax.set_axis_off()
ax.set_box_aspect([1, 1, 1])


# Set initial viewpoint (optional)
ax.view_init(elev=20, azim=120)

plt.tight_layout()
plt.show()

Possible orientations of an angular momentum vector with j=3..

Possible orientations of an angular momentum vector \(\vec{j}\) with \(j=3\).

2. Ladder Operators

While we will not make extensive use of them in this course, ladder operators (or raising and lowering operators) are a powerful algebraic tool in quantum mechanics. They provide an elegant way to describe how angular momentum states are connected to one another and are widely used in more advanced contexts — such as spin systems, addition of angular momenta, and matrix representations of operators.


2.1 Definition

For a given angular momentum operator \(\hat{\vec{j}}\), we define the ladder operators (also called step operators) as

\[ \hat{j}_{\pm} = \hat{j}_x \pm i \hat{j}_y. \]

They are not Hermitian individually, but they are adjoint to one another: \[ \hat{j}_+^\dagger = \hat{j}_-. \]

Together with \(\hat{j}_z\), these operators fully specify the algebra of angular momentum.


2.2 Commutation relations

Using the fundamental commutation relations of angular momentum, \[ [\hat{j}_x, \hat{j}_y] = i\hbar \hat{j}_z, \] and its cyclic permutations, one finds

\[ [\hat{j}_z, \hat{j}_\pm] = \pm \hbar \hat{j}_\pm, \qquad [\hat{j}_+, \hat{j}_-] = 2\hbar \hat{j}_z. \]

These relations show that \(\hat{j}_\pm\) act as shift operators on the magnetic quantum number \(m_j\): applying \(\hat{j}_+\) increases \(m_j\) by one unit, while \(\hat{j}_-\) decreases it by one.


2.3 Action on eigenstates

If \(|j, m_j\rangle\) is an eigenstate of \(\hat{j}^2\) and \(\hat{j}_z\),

\[ \hat{j}^2 |j, m_j\rangle = \hbar^2 j(j+1)|j, m_j\rangle, \qquad \hat{j}_z |j, m_j\rangle = \hbar m_j |j, m_j\rangle, \]

then the ladder operators act as

\[ \hat{j}_\pm |j, m_j\rangle = \hbar \sqrt{j(j+1) - m_j(m_j \pm 1)} \, |j, m_j \pm 1\rangle. \]

This result follows from the commutation relations above and the normalization of the eigenstates.

  1. Commutation with \(\hat{j}_z\)

    Start from
    \[ [\hat{j}_z, \hat{j}_\pm] = \pm \hbar \hat{j}_\pm. \] Acting on \(|j, m_j\rangle\) gives
    \[ \hat{j}_z (\hat{j}_\pm |j, m_j\rangle) = (\hbar m_j \pm \hbar)(\hat{j}_\pm |j, m_j\rangle). \] Thus, \(\hat{j}_\pm |j, m_j\rangle\) is an eigenstate of \(\hat{j}_z\) with eigenvalue \(\hbar (m_j \pm 1)\).

  2. Commutation with \(\hat{j}^2\)

    Since \([\hat{j}^2, \hat{j}_\pm] = 0\),
    \(\hat{j}_\pm |j, m_j\rangle\) has the same total angular momentum \(j\) as the original state.

  3. Normalization factor

    Define a constant \(C_\pm(j, m_j)\) by
    \[ \hat{j}_\pm |j, m_j\rangle = C_\pm(j, m_j) \, |j, m_j \pm 1\rangle. \]

    Taking the inner product with itself and using
    \(\hat{j}_- = \hat{j}_+^\dagger\), one finds \[ \langle j, m_j | \hat{j}_\mp \hat{j}_\pm | j, m_j \rangle = |C_\pm(j, m_j)|^2. \]

    Using \[ \hat{j}_- \hat{j}_+ = \hat{j}^2 - \hat{j}_z^2 - \hbar \hat{j}_z, \qquad \hat{j}_+ \hat{j}_- = \hat{j}^2 - \hat{j}_z^2 + \hbar \hat{j}_z, \] one obtains \[ |C_\pm(j, m_j)|^2 = \hbar^2 [j(j+1) - m_j(m_j \pm 1)]. \]

    Hence, \[ C_\pm(j, m_j) = \hbar \sqrt{j(j+1) - m_j(m_j \pm 1)}. \]

  4. Final result

    Therefore, \[ \boxed{ \hat{j}_\pm |j, m_j\rangle = \hbar \sqrt{j(j+1) - m_j(m_j \pm 1)} \, |j, m_j \pm 1\rangle. } \]


2.4 Remarks

Although we will not use ladder operators extensively in this course, it is useful to be aware of their conceptual and practical importance:

  • They reveal the algebraic structure of angular momentum, independent of any particular coordinate representation.
  • They allow one to generate all eigenstates of a given \(j\) starting from the highest-weight state \(|j, m_j = j\rangle\).
  • They form the foundation of the angular momentum operator formalism used throughout atomic, molecular, and nuclear physics.

In later applications, we will primarily use the eigenvalue relations and coupling rules derived from this operator algebra, rather than manipulating the ladder operators explicitly.

3. Coupling of Angular Momenta

When multiple angular momenta are present, they can be combined (or coupled) to form new total angular momenta. Understanding these couplings — and the associated selection rules — is essential for describing fine structure, hyperfine structure, and many spectroscopic transitions in atoms.


3.1 Total angular momentum operator

Consider two systems with angular momentum operators \(\hat{\vec{j}}_1\) and \(\hat{\vec{j}}_2\). The total angular momentum is defined as

\[ \hat{\vec{J}} = \hat{\vec{j}}_1 + \hat{\vec{j}}_2. \]

Each of these satisfies the angular momentum algebra independently:

\[ [\hat{j}_{1x}, \hat{j}_{1y}] = i\hbar \hat{j}_{1z}, \qquad [\hat{j}_{2x}, \hat{j}_{2y}] = i\hbar \hat{j}_{2z}, \]

and all components belonging to different subsystems commute:

\[ [\hat{j}_{1i}, \hat{j}_{2j}] = 0. \]

From this, it follows that \(\hat{\vec{J}}\) itself satisfies the same algebra, so it also represents a legitimate angular momentum operator.


3.2 Eigenvalue equations and quantum numbers

The operators \[ \hat{J}^2, \quad \hat{J}_z, \quad \hat{j}_1^2, \quad \hat{j}_2^2 \] commute with one another. Thus, we can choose a basis of simultaneous eigenstates, denoted by either of two equivalent descriptions:

(1) The uncoupled (product) basis:

\[ |j_1, m_1\rangle \, |j_2, m_2\rangle \;\equiv\; |j_1, j_2; m_1, m_2\rangle. \]

(2) The coupled basis:

\[ |j_1, j_2; J, M\rangle, \] where \(\hat{J}^2\) and \(\hat{J}_z\) are diagonal, meaning that the basis states are eigenstates of both the total angular momentum and its \(z\)-component.

The corresponding eigenvalue relations are

\[ \hat{J}^2 |j_1, j_2; J, M\rangle = \hbar^2 J(J+1) |j_1, j_2; J, M\rangle, \] \[ \hat{J}_z |j_1, j_2; J, M\rangle = \hbar M |j_1, j_2; J, M\rangle. \]


3.3 Possible values of the total angular momentum \(J\)

From the definition \(\hat{\vec{J}} = \hat{\vec{j}}_1 + \hat{\vec{j}}_2\), the possible quantum numbers \(J\) are determined by the vector model of angular momentum addition:

\[ J = j_1 + j_2, \; j_1 + j_2 - 1, \; \dots, \; |j_1 - j_2|. \]

That means \[ | j_1 - j_2 | \le J \le j_1 + j_2 , \]

where \(J\) can take all values between the sum and difference of \(j_1\) and \(j_2\), changing in steps of 1 (so either all integers or all half-integers depending on \(j_1\) and \(j_2\)). Each total \(J\) corresponds to a set of \(2J+1\) magnetic sublevels with \(M = -J, -J + 1, \dots, +J\).

Example:
If \(j_1 = 1\) and \(j_2 = \tfrac{1}{2}\), then \(J\) can be either \(\tfrac{3}{2}\) or \(\tfrac{1}{2}\).


3.4 Uncoupled vs. Coupled Representations

The two descriptions of the same physical system — uncoupled and coupled — are related by a change of basis:

\[ |j_1, j_2; J, M\rangle = \sum_{m_1, m_2} C^{J,M}_{j_1, m_1; j_2, m_2} \, |j_1, j_2; m_1, m_2\rangle, \]

where \(C^{J,M}_{j_1, m_1; j_2, m_2}\) are the Clebsch–Gordan coefficients. These coefficients describe how states with definite \(m_1, m_2\) combine to form a total state with definite \(J, M\).

The coefficients satisfy normalization and orthogonality relations, and tables or computational tools are typically used to evaluate them.


3.5 Physical interpretation

The coupling of angular momenta underlies many familiar quantum phenomena:

Coupling Typical physical context Example
\(\vec{L} + \vec{S} = \vec{J}\) Fine structure electron spin–orbit coupling
\(\vec{J} + \vec{I} = \vec{F}\) Hyperfine structure coupling of atomic angular momentum and nuclear spin
\(\vec{j}_1 + \vec{j}_2\) Multi-electron systems term symbols in atoms
\(\vec{l} + \vec{s}\) Single-particle spin–orbit coupling hydrogen-like atoms

In short:
The same mathematical rules govern all these cases — only the physical meaning of each \(\vec{j}\) changes.


3.6 Selection rules (preview)

When angular momenta are coupled, transitions between states are restricted by selection rules that follow from conservation of total angular momentum and symmetry. For instance, in electric dipole transitions:

\[ \Delta J = 0, \pm 1 \quad (\text{but } J = 0 \not\leftrightarrow J' = 0), \] \[ \Delta M = 0, \pm 1. \]

A more detailed discussion of these rules and their derivation will be given in later chapters.


Summary

  • The total angular momentum is the vector sum \(\hat{\vec{J}} = \hat{\vec{j}}_1 + \hat{\vec{j}}_2\).
  • \(J\) can take values between \(|j_1 - j_2|\) and \(j_1 + j_2\).
  • Coupled and uncoupled states are related through Clebsch–Gordan coefficients.
  • These coupling rules are universal — they apply to all forms of angular momentum in quantum mechanics.

4. Representing Coupled Angular Momentum States — Clebsch–Gordan Coefficients

When two angular momenta are combined, there are two equivalent ways to represent the system:

  1. In the uncoupled (product) basis, where each angular momentum has its own quantum numbers \(m_1\) and \(m_2\).
  2. In the coupled basis, where the total angular momentum quantum numbers \(J\) and \(M\) are used.

The transformation between these two representations is given by the Clebsch–Gordan (CG) coefficients.


4.1 The transformation between bases

Formally, the two representations are related as

\[ |j_1, j_2; J, M\rangle = \sum_{m_1, m_2} C^{J, M}_{j_1, m_1; j_2, m_2} \; |j_1, j_2; m_1, m_2\rangle, \]

and conversely,

\[ |j_1, j_2; m_1, m_2\rangle = \sum_{J, M} C^{J, M}_{j_1, m_1; j_2, m_2} \; |j_1, j_2; J, M\rangle. \]

The coefficients \(C^{J, M}_{j_1, m_1; j_2, m_2}\) are real numbers that depend only on the angular momentum quantum numbers and describe how the \(m_1\), \(m_2\) combinations “add up” to a total \(M\).


4.2 Selection rules for nonzero coefficients

The Clebsch–Gordan coefficients vanish unless the following conditions are satisfied:

  1. Magnetic quantum numbers add up: \[ M = m_1 + m_2. \]

  2. Total angular momentum must be within allowed limits: \[ |j_1 - j_2| \le J \le j_1 + j_2. \]

  3. Normalization and orthogonality: \[ \sum_{m_1, m_2} |C^{J, M}_{j_1, m_1; j_2, m_2}|^2 = 1. \]

In words:
Only those combinations of \(m_1\) and \(m_2\) that yield the correct total \(M\) contribute to the coupled state with quantum numbers \((J, M)\).


4.3 Example: Coupling \(j_1 = 1\) and \(j_2 = \tfrac{1}{2}\)

This example illustrates how the total angular momentum \(J\) can take the values \(\tfrac{3}{2}\) and \(\tfrac{1}{2}\).

(a) Total \(J = \tfrac{3}{2}\)

\[ \begin{aligned} | \tfrac{3}{2}, \tfrac{3}{2} \rangle &= |1, 1\rangle \, |\tfrac{1}{2}, \tfrac{1}{2}\rangle, \\ | \tfrac{3}{2}, \tfrac{1}{2} \rangle &= \sqrt{\tfrac{2}{3}}\, |1, 0\rangle \, |\tfrac{1}{2}, \tfrac{1}{2}\rangle + \sqrt{\tfrac{1}{3}}\, |1, 1\rangle \, |\tfrac{1}{2}, -\tfrac{1}{2}\rangle. \end{aligned} \]

(b) Total \(J = \tfrac{1}{2}\)

\[ | \tfrac{1}{2}, \tfrac{1}{2} \rangle = \sqrt{\tfrac{1}{3}}\, |1, 0\rangle \, |\tfrac{1}{2}, \tfrac{1}{2}\rangle - \sqrt{\tfrac{2}{3}}\, |1, 1\rangle \, |\tfrac{1}{2}, -\tfrac{1}{2}\rangle. \]

This small example shows how the different combinations of \(m_1\) and \(m_2\) form states of definite total \(J\).


4.4 Orthogonality and completeness

The Clebsch–Gordan coefficients form a unitary transformation between the two bases.
This means they satisfy the orthogonality relations:

\[ \sum_{m_1, m_2} C^{J, M}_{j_1, m_1; j_2, m_2} C^{J', M'}_{j_1, m_1; j_2, m_2} = \delta_{J, J'} \, \delta_{M, M'}, \]

and

\[ \sum_{J, M} C^{J, M}_{j_1, m_1; j_2, m_2} C^{J, M}_{j_1, m'_1; j_2, m'_2} = \delta_{m_1, m'_1} \, \delta_{m_2, m'_2}. \]

These relations ensure that the coupled and uncoupled bases are equivalent representations of the same Hilbert space.


4.5 Relation to the vector model

In the semiclassical vector model of angular momentum, each \(\vec{j}_i\) is represented as a vector of fixed length but uncertain orientation.
The Clebsch–Gordan coefficients describe quantum mechanically how the projections of these vectors combine along a chosen quantization axis.

They tell us the probability amplitude for obtaining a total projection \(M\) when two angular momentum components \(m_1\) and \(m_2\) are added.


4.6 Practical use

In practice, CG coefficients are:

  • Tabulated in many textbooks and online resources,
  • Computed automatically in symbolic or numerical software (e.g. Mathematica, SymPy),
  • Expressible in terms of Wigner 3-j symbols, which are often more symmetric in formal derivations: \[ C^{J, M}_{j_1, m_1; j_2, m_2} = (-1)^{j_1 - j_2 + M} \sqrt{2J + 1} \begin{pmatrix} j_1 & j_2 & J \\ m_1 & m_2 & -M \end{pmatrix}. \]

Summary

  • The Clebsch–Gordan coefficients connect the uncoupled and coupled representations of angular momentum.
  • They encode how \(m_1\) and \(m_2\) combine to yield a total \(M\).
  • Only combinations satisfying \(M = m_1 + m_2\) and \(|j_1 - j_2| \le J \le j_1 + j_2\) contribute.
  • The coefficients form a unitary transformation between the two bases and have deep geometric meaning in the vector model.

Note:
In the following chapters, these rules will be applied to specific coupling schemes such as spin–orbit coupling (\(\vec{L} + \vec{S}\)) and hyperfine coupling (\(\vec{J} + \vec{I}\)), where the Clebsch–Gordan coefficients determine the structure and relative intensities of spectral lines.