Skip to main content

Physics V course sequence · Interactive lesson

Angular momentum matrices and the uncertainty bound

The ladder argument handed you a spectrum and no object to compute with. This topic hands you the object: one (2j+1)-square array per component, filled from a single square root, that you can multiply, commute and diagonalise in ten lines of NumPy — and then read the uncertainty bound straight off the commutator.

UPV-09.04 · Lesson 4 of 9 in this unit. Position is not a completion score.
Starting model: Angular momentum matrices and the uncertainty boundLeft: an arrow of length √(j(j+1)) ħ = 1.41 ħ at height ⟨Jz⟩ = mħ with m = 1.0; the dashed rim is the rms transverse spread, a standard deviation, not a position. Right: ΔJxΔJy = (j(j+1) − m²)ħ²/2 (solid) against the bound |m|ħ²/2 (dashed) for every m from −j to j, meeting only at m = ±j; now 0.50 ħ² against 0.50 ħ².rim radius ΔJ⊥ = 1.00 ħz-axis: |J| = 1.41 ħ, ⟨Jz⟩ = 1.0 ħsolid ΔJx⋅ΔJy dashed ħ|⟨Jz⟩|/2max 1.00 ħ² at |m| = 0.0m = −1.0m = 0m = +1.0
Start with a picture. Change the model in the lab below.
1

Build the model

Choose the |j, m⟩ basis and the algebra becomes arithmetic you can check.

The key idea

The matrix representation of angular momentum writes Jₓ, Jy and Jz as (2j+1)×(2j+1) Hermitian matrices whose entries are ⟨j, m′|Jᵢ|j, m⟩ in the eigenbasis of J² and Jz, so operator identities become checks on matrix products.

Example. For j = 1 the entries are Jz = ħ diag(1, 0, −1) and Jₓ = (ħ/√2) times the tridiagonal matrix with 1s beside the diagonal; multiplying out JₓJy − JyJₓ returns iħ² diag(1, 0, −1) entry by entry, which is iħJz.

The complete physical model and assumptions

Angular momentum was quantised by algebra alone, and the same algebra is what makes it computable. Fix the basis |j, m⟩ of simultaneous eigenvectors of J² and Jz, ordered m = j down to −j, and every component becomes a finite Hermitian matrix whose entries are the inner products ⟨j, m′|Jᵢ|j, m⟩. Jz is diagonal with mħ; J₊ is a single stripe above the diagonal carrying ħ√(j(j+1) − m(m+1)); J₋ is its adjoint; Jₓ and Jy are the Hermitian combinations (J₊ + J₋)/2 and (J₊ − J₋)/2i, each entry half a ladder element. Nothing else is needed. The commutators, the Casimir J² = ħ² j(j+1) I, the rotation exp(−iθ n⋅J/ħ) and the spectrum of J along any axis all fall out of matrix arithmetic, and a commutator residual near machine ε is the proof that your arrays are the representation and not a transcription error. The price is written in the same algebra: [Jₓ, Jy] = iħJz fed into the Robertson inequality returns ΔJₓ ΔJy ≥ (ħ/2)|⟨Jz⟩|, a floor that moves with the state and forbids sharp Jₓ and Jy whenever ⟨Jz⟩ ≠ 0. In |j, m⟩ itself the transverse spreads are each ħ√((j(j+1) − m²)/2), never zero for j > 0, so the familiar cone of half-angle cos θ = m/√(j(j+1)) is a diagram of variances: it has no azimuth, nothing on it moves, and it is not a trajectory.

1Choose the basis before you write a single entry

A matrix element is meaningless until the basis is named. Take the 2j+1 simultaneous eigenvectors |j, m⟩ of J² and Jz, orthonormal, and order them m = j, j−1, …, −j from the top row down. That ordering is a convention, but it is the convention every Clebsch–Gordan table and every NumPy script assumes, and changing it permutes the rows and columns of everything that follows. In this basis Jz is already finished: ⟨j, m′|Jz|j, m⟩ is mħ when m′ = m and zero otherwise, a real diagonal matrix reading ħ diag(j, …, −j). J² is finished too, and it is invisible: ħ² j(j+1) times the identity, so within one j it commutes with everything and cannot help you tell states apart. All the content sits in the two components that fail to commute with Jz, and those you have to build.

2Assemble J₊ from one square root, then take halves

The norm of J₊|j, m⟩ is fixed by the algebra: ⟨j, m|J₋J₊|j, m⟩ = ⟨J² − Jz² − ħJz⟩ = ħ²(j(j+1) − m(m+1)), and with the Condon–Shortley choice of phases its root is real and non-negative, so ⟨j, m+1|J₊|j, m⟩ = ħ√(j(j+1) − m(m+1)). For j = 3/2 the three entries are ħ√3, 2ħ and ħ√3, for the steps from m = 1/2 to 3/2, from −1/2 to 1/2, and from −3/2 to −1/2. In the m-descending ordering they sit on the stripe just above the diagonal, J₋ = J₊† puts the same numbers just below, and Jₓ = (J₊ + J₋)/2 is the real symmetric tridiagonal matrix with (√3, 2, √3)ħ/2 beside the diagonal. Jy = (J₊ − J₋)/2i carries the same magnitudes, as −i times them above the diagonal and +i times them below. The halves are not decoration: leave them out and every variance you compute later comes out four times too big.

3Verify the algebra numerically before trusting anything else

In NumPy, with ħ = 1: m = np.arange(j, −j - 1, −1); off = np.√(j*(j+1) - m[:-1]*m[1:]); Jp = np.diag(off, 1); Jm = Jp.conj().T; Jx = (Jp + Jm)/2; Jy = (Jp - Jm)/(2*1j); Jz = np.diag(m). The product m[:-1]*m[1:] equals m(m+1) for the lower member of each adjacent pair, which is what the ladder formula wants. Then test: np.linalg.norm(Jx@Jy - Jy@Jx - 1j*Jz) should return something like 3 × 10⁻¹⁶, and Jx@Jx + Jy@Jy + Jz@Jz should equal j(j+1) times the identity to the same precision. By hand at j = 1, JₓJy is (ħ²/2) times the matrix with rows (i, 0, −i), (0, 0, 0), (i, 0, −i), while JyJₓ has rows (−i, 0, −i), (0, 0, 0), (i, 0, i); subtracting gives (ħ²/2) diag(2i, 0, −2i) = iħ × ħ diag(1, 0, −1) = iħJz. A residual of order 1 rather than 10⁻¹⁵ almost always means a dropped half, a conjugate missed on J₋, or m ordered upward while the stripe was placed above the diagonal.

4Read the uncertainty bound off the commutator

The Robertson inequality σA σB ≥ ½|⟨[A, B]⟩| needs one commutator and one state. Feed it [Jₓ, Jy] = iħJz and it returns ΔJₓ ΔJy ≥ (ħ/2)|⟨Jz⟩| — a floor that depends on the state through ⟨Jz⟩, unlike the constant ħ/2 for x and p. Evaluate it in |j, m⟩. Jₓ only connects m to m ± 1, so ⟨Jₓ⟩ = 0, and likewise ⟨Jy⟩ = 0. For the second moments use Jₓ² + Jy² = J² − Jz², whose expectation is ħ²(j(j+1) − m²); the state is symmetric under rotations about z, so the two shares are equal and ⟨Jₓ²⟩ = ⟨Jy²⟩ = ħ²(j(j+1) − m²)/2. The product ΔJₓ ΔJy is therefore (j(j+1) − m²)ħ²/2 against a bound of |m|ħ²/2. At j = 1, m = 1 both sides equal ħ²/2: the stretched state saturates the inequality. At j = 1, m = 0 the product is ħ² while the bound is zero — satisfied, but the theorem has gone silent, and only the direct calculation says how spread Jₓ actually is.

5The cone is a plot of variances, not a path

Draw |J| = ħ√(j(j+1)) at the angle cos θ = m/√(j(j+1)) to the z-axis and sweep it round: that is the textbook cone, and it encodes exactly two numbers. Its height is ⟨Jz⟩ = mħ; its rim radius is √(⟨Jₓ²⟩ + ⟨Jy²⟩) = ħ√(j(j+1) − m²), the root-mean-square transverse spread. For j = 1, m = 1 the half-angle is 45° and the rim radius is ħ — as large as the height. Nothing in the picture is a position on the rim, because the state has no azimuth: ⟨Jₓ⟩ and ⟨Jy⟩ are zero, and a standard deviation has no direction to point in. Nothing in it moves either. Without a Hamiltonian |j, m⟩ is stationary, and with H = ωJz it acquires the phase e(−imωt), which changes no expectation value at all. Precession is real only for a superposition of different m, and even then it is ⟨J⟩ that rotates, not a tip riding a circle. The reason the arrow cannot lie along z even at m = j is the same bookkeeping: √(j(j+1)) exceeds j because ΔJₓ = ΔJy = ħ√(j/2) is not zero in the top state.

6Rotate the axis and the spectrum stays put

The eigenvalues of n⋅J = nₓJₓ + nyJy + nzJz are the same 2j+1 numbers mħ for every unit vector n, because n⋅J is unitarily equivalent to Jz through the rotation that carries z into n. At j = 1 the eigenvector of Jₓ with eigenvalue +ħ is (1, √2, 1)/2 in the (|1, 1⟩, |1, 0⟩, |1, −1⟩) ordering — check it: Jₓ on that vector gives (ħ/√2)(√2, 2, √2)/2, which is ħ times the vector back. In that state ⟨Jz⟩ = ħ(1/4 − 1/4) = 0, so the bound on ΔJₓ ΔJy is zero and is met with ΔJₓ = 0 exactly; but the cyclic partner ΔJy ΔJz ≥ (ħ/2)|⟨Jₓ⟩| = ħ²/2 is live, and ⟨Jy²⟩ = ⟨Jz²⟩ = ħ²/2 makes it saturate. Numerically this is the whole lab: build n⋅J for a random n, call np.linalg.eigh, confirm the spectrum, then compute variances in each eigenvector and compare Δ(n′⋅J) Δ(n″⋅J) with (ħ/2)|⟨(n′ × n″)⋅J⟩| for a perpendicular pair of unit vectors n′ and n″. Within a single j the spectrum of n⋅J is non-degenerate, so eigh returns the eigenvectors unambiguously; stack several j and the m-values repeat, eigh hands back an arbitrary basis of each eigenspace, and a variance computed there is a property of that choice, not of the physics.

2

Key equations

Read the units, assumptions and limits before substituting.

Ladder matrix element

⟨j, m+1|J₊|j, m⟩ = ⟨j, m|J₋|j, m+1⟩ = ħ √(j(j+1) − m(m+1))

The only input. J₊ is the stripe just above the diagonal in the m-descending ordering, J₋ = J₊† the stripe just below, and every entry of Jₓ and Jy is half of one of these numbers.

j, m dimensionless; ħ = 1.055 × 10⁻³⁴ J s carries the unit; the Condon–Shortley phase makes every entry real and ≥ 0

Cartesian components from the ladders

Jₓ = (J₊ + J₋)/2, Jy = (J₊ − J₋)/2i, Jz = ħ diag(j, j−1, …, −j)

Hermiticity is built in because J₋ = J₊†. The 1/2 and 1/2i are where hand-built matrices most often go wrong, and the error shows up later as every variance four times too large.

ordering m = j down to −j; Jₓ real symmetric, Jy imaginary antisymmetric, Jz real diagonal — all three Hermitian

Algebra check

[Jₓ, Jy] = iħ Jz, Jₓ² + Jy² + Jz² = ħ² j(j+1) I

Two lines of NumPy that catch a wrong sign, a dropped half or a mis-ordered basis before anything downstream inherits the mistake.

I the (2j+1)-square identity; in float64 the Frobenius norm of JₓJy − JyJₓ − iħJz should sit near 10⁻¹⁵ ħ²

Robertson bound for Jₓ and Jy

ΔJₓ ΔJy ≥ (ħ/2) |⟨Jz⟩|

Read straight off σA σB ≥ ½|⟨[A, B]⟩| with [Jₓ, Jy] = iħJz. Cyclic permutation gives the other two pairs, and each goes empty wherever the mean on its own right-hand side vanishes.

ΔJᵢ = √(⟨Jᵢ²⟩ − ⟨Jᵢ⟩²), in units of ħ; the right side is an expectation in the same state, so the floor moves with the state

Spreads in an eigenstate |j, m⟩

⟨Jₓ⟩ = ⟨Jy⟩ = 0, ΔJₓ = ΔJy = ħ √((j(j+1) − m²)/2)

Never zero for j > 0, even at m = ±j, where product and bound both equal j ħ²/2: the stretched states saturate the inequality and every m strictly between them sits above it.

from Jₓ² + Jy² = J² − Jz² and the x–y symmetry of the state; the product is (j(j+1) − m²) ħ²/2 against a bound of |m| ħ²/2

Spectrum along any axis

eigenvalues of n⋅J = nₓ Jₓ + ny Jy + nz Jz are mħ, m = −j, …, j

Rotational invariance made concrete: diagonalise n⋅J numerically for a random n and the same 2j+1 numbers return, each with a new eigenvector.

n a unit vector; the eigenvectors are U|j, m⟩, U the rotation carrying z into n — they change while the eigenvalues do not
3

Interactive lab

Predict first. Explore the model. Compare the result.

Explore the model

1.0
0.5 to 3; steps of 0.5.
0
0 to 6; steps of 1.

Try this. At j = 1 move k from 0 to 1: m drops to 0, the open ring falls to the axis as the bound vanishes while the filled dot climbs to the peak — then return k to 0 and raise j to 3: dot and ring coincide again at the right-hand end, yet the cone still opens by √3 ħ in the stretched state.

Live results

m = j − k
1.0
ΔJx = ΔJy
0.707 ħ
PRODUCT ΔJx⋅ΔJy
0.500 ħ²
BOUND ħ|⟨Jz⟩|/2
0.500 ħ²

Results follow this lesson’s model and assumptions. Displayed values are rounded.

Interactive Physics V modelLeft: an arrow of length √(j(j+1)) ħ = 1.41 ħ at height ⟨Jz⟩ = mħ with m = 1.0; the dashed rim is the rms transverse spread, a standard deviation, not a position. Right: ΔJxΔJy = (j(j+1) − m²)ħ²/2 (solid) against the bound |m|ħ²/2 (dashed) for every m from −j to j, meeting only at m = ±j; now 0.50 ħ² against 0.50 ħ².rim radius ΔJ⊥ = 1.00 ħz-axis: |J| = 1.41 ħ, ⟨Jz⟩ = 1.0 ħsolid ΔJx⋅ΔJy dashed ħ|⟨Jz⟩|/2max 1.00 ħ² at |m| = 0.0m = −1.0m = 0m = +1.0
Left: an arrow of length √(j(j+1)) ħ = 1.41 ħ at height ⟨Jz⟩ = mħ with m = 1.0; the dashed rim is the rms transverse spread, a standard deviation, not a position. Right: ΔJxΔJy = (j(j+1) − m²)ħ²/2 (solid) against the bound |m|ħ²/2 (dashed) for every m from −j to j, meeting only at m = ±j; now 0.50 ħ² against 0.50 ħ².

Predict → change one variable → check

Plan a change before running it. Every other input stays at the saved baseline.

Saved baseline. Angular momentum j: 1.0; Steps k below the top state: 0

Baseline 1.0; choose 0.5 to 3, in steps of 0.5.
4. Compared with the saved baseline, this result will…

This experiment is kept only while this page is open. It does not change saved course progress.

4

Catch the common trap

The error is to read the cone as a real vector that has a definite length ħ√(j(j+1)), sits at a definite tilt, and sweeps round the z-axis so fast that its x and y components average to zero. Nothing in the state supports any of that. Measure Jₓ in |j, m⟩ and you get one of the same 2j+1 values m′ħ, never the projection of a tilted arrow; the transverse quantity the cone draws is ΔJₓ = ΔJy = ħ√((j(j+1) − m²)/2), a standard deviation, and a standard deviation has no azimuth to precess through. Nor is there any motion to average away: |j, m⟩ is stationary, and even under H = ωJz its only change is a global phase. The cone is variance bookkeeping — height ⟨Jz⟩, rim radius √(⟨Jₓ²⟩ + ⟨Jy²⟩) — and it is the picture of why ⟨Jₓ²⟩ can never be zero while [Jₓ, Jy] = iħJz has a non-zero mean.

5

Practice & worked examples

3 authored examples. Make an attempt, then reveal the reasoning one step at a time.

EasyExample 1

Use the ladder matrix element ⟨j, m+1|J₊|j, m⟩ = ħ√(j(j+1) − m(m+1)) to build J₊, J₋, Jₓ and Jy for j = 1/2 in the basis (|½, ½⟩, |½, −½⟩), and identify the Pauli matrices.

Sketch your answer or reasoning, then compare it with the authored solution. Your writing is not automatically graded or saved.

0 of 4 steps revealed.

MediumExample 2

For j = 3/2, write the non-zero entries of J₊, build Jₓ, and find ΔJₓ in the state |3/2, 1/2⟩. Compare ΔJₓ ΔJy with the Robertson bound (ħ/2)|⟨Jz⟩|.

Sketch your answer or reasoning, then compare it with the authored solution. Your writing is not automatically graded or saved.

0 of 5 steps revealed.

HardExample 3

For j = 1, find the normalised eigenvector of Jₓ with eigenvalue +ħ in the basis (|1, 1⟩, |1, 0⟩, |1, −1⟩). In that state compute ⟨Jz⟩, ΔJy and ΔJz, and test the cyclic bound ΔJy ΔJz ≥ (ħ/2)|⟨Jₓ⟩|.

Sketch your answer or reasoning, then compare it with the authored solution. Your writing is not automatically graded or saved.

0 of 5 steps revealed.

6

Quick check

Select an answer and explain it before checking.

A spin-1 system (j = 1) is prepared in |1, 1⟩, the m = +1 eigenstate of Jz. What is ΔJₓ ΔJy in that state, and how does it compare with the Robertson bound?
7

Review & continue

The matrix representation of angular momentum writes Jₓ, Jy and Jz as (2j+1)×(2j+1) Hermitian matrices whose entries are ⟨j, m′|Jᵢ|j, m⟩ in the eigenbasis of J² and Jz, so operator identities become checks on matrix products.

  • Explain the relationship without looking at the equation.
  • Check a sign, a unit and a model assumption in your working.
  • Return to the lab or worked example if a step is still unclear.

Extra challenging questions

Connect several ideas, explore supplied data, and compare your reasoning with a worked solution.