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
Loading...

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
Loading...
Rz90*px
Loading...

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

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

Yes, this agrees.

Can also use inner product:

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

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
Loading...
Rz90 = (-1j*pi/2*Jz).expm()
Rz90*xu == -1j*yu
True
Rz90*xu
Loading...
yd
Loading...
abs(y0.dag()*Rz90*x0)
1.0

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
0.4999999999999999
abs(zu.dag()*yu)**2
0.2500000000000002
abs(zd.dag()*yu)**2
0.2500000000000001

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
0.4999999999999999
abs(xd.dag()*y0)**2
0.4999999999999999

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
Loading...
Jsquared = Jx*Jx + Jy*Jy + Jz*Jz
Jsquared
Loading...
psi.dag()*Jsquared*psi
(1.9999999999999993+0j)
psi.dag()*Jy*psi
0j
psi.dag()*Jz*psi
0j