Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Chapter 7 - Angular Momentum and Rotation

Chapter 7 - Angular Momentum and Rotation

We’ll use =1\hbar=1 for numerical results, this is standard practice, but it is important to remember.

from numpy import sqrt, pi, exp, angle
from qutip import *

Our usual spin operators (spin-1/2)

pz = basis(2,0)
mz = basis(2,1)
px = 1/sqrt(2)*(pz + mz)
mx = 1/sqrt(2)*(pz - mz)
py = 1/sqrt(2)*(pz + 1j*mz)
my = 1/sqrt(2)*(pz - 1j*mz)
Sx = 1/2.0*sigmax()
Sy = 1/2.0*sigmay()
Sz = 1/2.0*sigmaz()
Splus = Sx + 1j*Sy
Sminus = Sx - 1j*Sy

Define the spin-1 operators. We use J just to keep them apart. Could be S instead.

Jx = 1/sqrt(2)*Qobj([[0,1,0],[1,0,1],[0,1,0]])
Jy = 1/sqrt(2)*Qobj([[0,-1j,0],[1j,0,-1j],[0,1j,0]])
Jz = Qobj([[1,0,0],[0,0,0],[0,0,-1]])
Jplus = Jx + 1j*Jy # raising operator
Jminus = Jx - 1j*Jy # lowering operator
Jz

Rotations of spin-1/2

To define an exponentiated operator, we apply the .expm() method to the argument. So to write the rotation operator:

R^z(90)=eiπ2S^z\hat{R}_z(90^\circ) = e^{-i\frac{\pi}{2}\hat{S}_z}

we do the following. It looks a little odd to read since you might expect the exp to come first, but looks like this:

Rz90 = (-1j*pi/2*Sz).expm()
Rz90
Rz90*px

Doesn’t look like example 7.4 because it’s not simplified. How to check:

exp(-1j*pi/4)*py

Yes, this agrees.

Can also use inner product:

py.dag()*Rz90*px
abs(py.dag()*Rz90*px)
angle(0.707 - 0.707j) == -pi/4

Find the spin-1 states (the eigenstates of the corresponding matrix)

According to the postulates, the allowed values of an observable are the eigenvalues with corresponding eigenstates.

We know the matrix representation of Jx, Jy, Jz in the Z-basis so we can find all 9 states (in the Z basis). Why nine? There are three possible values \hbar, 0, -\hbar for each of three directions.

yevals, (yd,y0,yu) = Jy.eigenstates()
zevals, (zd,z0,zu) = Jz.eigenstates()
xevals, (xd,x0,xu) = Jx.eigenstates()

# Fix the signs to match book:
# (if first value of eigenstate is negative, flip all signs)
states = [xd, x0, xu, yd, y0, yu, zd, z0, zu]
states = [-s if s.full()[0][0]<0 else s for s in states]
# Python doesn't change the values in the list so we have 
# to replace the old values with the new ones:
[xd, x0, xu, yd, y0, yu, zd, z0, zu] = states
xd
Rz90 = (-1j*pi/2*Jz).expm()
Rz90*xu == -1j*yu
Rz90*xu
yd
abs(y0.dag()*Rz90*x0)

7.10 A spin-1 particle is measured to have Sy=S_y=\hbar. What is the probability that a subsequent measurement will yield Sz=0S_z=0? Sz=S_z=\hbar? Sz=S_z=-\hbar?

abs(z0.dag()*yu)**2
abs(zu.dag()*yu)**2
abs(zd.dag()*yu)**2

7.11 A spin-1 particle is measured to have Sy=0S_y=0. What is the probability that a subsequent measurement will yield Sx=S_x=-\hbar?

abs(y0.dag()*xd)**2
abs(xd.dag()*y0)**2

7.13 ψ=13(21,1i1,0+21,1)|\psi\rangle = \frac{1}{3}(2|1,1\rangle - i|1,0\rangle + 2|1,-1\rangle) Calculate expectation values of S2S^2, SyS_y, and SzS_z.

psi = (1/3)*(2*zu -1j*z0 +2*zd)
psi
Jsquared = Jx*Jx + Jy*Jy + Jz*Jz
Jsquared
psi.dag()*Jsquared*psi
psi.dag()*Jy*psi
psi.dag()*Jz*psi