3. 自旋测量与关联函数

在 Bell 不等式实验中,真正被“测量”的不是一个预先存在的经典数值,而是自旋沿某一空间方向的投影结果。要编程实现这一过程,必须先把物理语言翻译成线性代数语言:测量方向是一个单位向量,测量基是该方向上的本征态,测量算符是投影算符,而关联函数则是两个投影结果在大量重复测量上的统计平均。本节围绕这条线索,给出可落地的算符构造与关联函数计算方法。

一、自旋投影算符与测量基

对自旋 1/2 粒子,沿单位方向 n = (nx, ny, nz) 的自旋算符可写成

σ·n = nx·σx + ny·σy + nz·σz

其中 σx、σy、σz 为泡利矩阵。该算符有两个本征值 +1 和 −1,对应本征态 |n,+⟩ 与 |n,−⟩。测量“自旋沿 n 方向是 +1 还是 −1”,在数学上就是向这两个本征态投影。定义投影算符

P₊(n) = (I + σ·n) / 2
P₋(n) = (I − σ·n) / 2

它们满足 P₊ + P₋ = I、P₊P₋ = 0、P₊² = P₊,正是正交投影算符的标准性质。于是“沿 n 方向测量自旋”这一可观测量可以写成

A(n) = (+1)·P₊(n) + (−1)·P₋(n) = σ·n

这一步非常关键:测量算符就是 σ·n 本身,而投影算符给出了取 +1 或 −1 的概率分解。对任意态 |ψ⟩,取 +1 的概率为 ⟨ψ|P₊(n)|ψ⟩,取 −1 的概率为 ⟨ψ|P₋(n)|ψ⟩,两者之和为 1。

需要先约定参照系:本文取 z 轴为量子化轴,|0⟩ 对应 σz 的 +1 本征态,|1⟩ 对应 −1 本征态;方位角 φ 从 x 轴正向起算,极角 θ 从 z 轴正向起算。全文与图示均采用这一约定。于是

n = (sinθ·cosφ, sinθ·sinφ, cosθ)

当 θ=0 时 n 指向 +z,测量基退化为计算基 {|0⟩, |1⟩};当 θ=π/2、φ=0 时 n 指向 +x,测量基为 |±x⟩ = (|0⟩ ± |1⟩)/√2。编程时只需保存 (θ, φ) 两个参数,即可唯一确定一组测量基。

二、关联函数 E(a,b) 的定义

设 Alice 沿方向 a 测量粒子 1,Bob 沿方向 b 测量粒子 2,各自得到 ±1 的结果。定义单次联合结果的乘积为 A·B ∈ {+1, −1},则关联函数为

E(a,b) = ⟨ψ| (σ·a) ⊗ (σ·b) |ψ⟩

等价地,若用概率表示,设 P(i,j) 为 Alice 得 i、Bob 得 j 的联合概率(i, j ∈ {+1, −1}),则

E(a,b) = P(+,+) + P(−,−) − P(+,−) − P(−,+)

两种写法在理想测量下完全等价:前者是算符期望值,后者是统计频率的极限。编程实现时,前者适合直接做矩阵运算,后者适合用采样数据估计,二者可以互相校验。对 Bell 态 |Φ⁺⟩ = (|00⟩ + |11⟩)/√2,解析结果为 E(a,b) = a·b = cosθab,其中 θab 是两测量方向夹角。这一结果将作为程序正确性的基准。

自旋测量算符构造与关联函数计算链 测量方向参数 a = (θ₁, φ₁) b = (θ₂, φ₂) 量子态 |ψ⟩ Bell 态 / 任意两比特态 4×4 密度矩阵 ρ 构造测量算符 σ·a = axσx+ayσy+azσz σ·b = bxσx+byσy+bzσz P₊ = (I+σ·n)/2 P₋ = (I−σ·n)/2 张量积 A⊗B 4×4 厄米矩阵 关联函数计算 E(a,b) = Tr[ρ·(A⊗B)] 或按概率展开: E = P₊₊+P₋₋−P₊₋−P₋₊ P(i,j)=Tr[ρ·(Pᵢ⊗Pⱼ)] 结果范围 [−1, +1] Bell 态下应得 a·b 结果校验与判读 ① 与解析值 a·b 比对(Bell 态) ② 检查 |E| ≤ 1 ③ 采样估计与矩阵计算互验 ④ 同向测量 E(a,a)=1,反向测量 E(a,−a)=−1

三、编程实现:任意方向测量算符

下面用 NumPy 给出最小可运行实现。核心只有三步:由 (θ, φ) 生成单位向量,用泡利矩阵线性组合出 σ·n,再与态做张量积并求迹。示例参数与结果均为教学演示,非实测数据。

import numpy as np

sx = np.array([[0, 1], [1, 0]], dtype=complex)
sy = np.array([[0, -1j], [1j, 0]], dtype=complex)
sz = np.array([[1, 0], [0, -1]], dtype=complex)
I2 = np.eye(2, dtype=complex)

def direction(theta, phi):
    return np.array([np.sin(theta)*np.cos(phi),
                     np.sin(theta)*np.sin(phi),
                     np.cos(theta)])

def sigma_n(theta, phi):
    nx, ny, nz = direction(theta, phi)
    return nx*sx + ny*sy + nz*sz

def projectors(theta, phi):
    sn = sigma_n(theta, phi)
    return (I2 + sn)/2, (I2 - sn)/2

def E(rho, a, b):
    A = sigma_n(*a)
    B = sigma_n(*b)
    return np.real(np.trace(rho @ np.kron(A, B)))

# Bell 态 |Φ⁺⟩
phi_plus = np.array([1, 0, 0, 1], dtype=complex) / np.sqrt(2)
rho = np.outer(phi_plus, phi_plus.conj())

a = (np.pi/2, 0.0)          # 沿 +x
b = (np.pi/2, np.pi/2)      # 沿 +y
print(E(rho, a, b))         # 演示输出约为 0.0
print(E(rho, a, a))         # 演示输出约为 1.0

运行后可观察到:a 与 b 正交时 E≈0,同向时 E≈1,与解析式 a·b 一致。若把 b 改为 (π/2, π/4),即两方向夹角 45°,则 E≈cos45°≈0.7071。这些数值可作为程序正确性的快速自检点。注意 np.trace 可能返回带微小虚部的复数,取实部是合理做法,因为厄米算符的期望值必为实数。

四、用采样估计关联函数

矩阵法给出的是理想期望值。若想模拟真实实验,需要按概率采样。对每个方向,先算四个联合概率 P(i,j),再用多项式采样生成 N 次结果,最后用频率估计 E。示例代码如下:

def joint_probs(rho, a, b):
    Pa_p, Pa_m = projectors(*a)
    Pb_p, Pb_m = projectors(*b)
    ops = {(1,1): np.kron(Pa_p, Pb_p), (1,-1): np.kron(Pa_p, Pb_m),
           (-1,1): np.kron(Pa_m, Pb_p), (-1,-1): np.kron(Pa_m, Pb_m)}
    return {k: np.real(np.trace(rho @ v)) for k, v in ops.items()}

def sample_E(rho, a, b, N=20000, seed=0):
    rng = np.random.default_rng(seed)
    probs = joint_probs(rho, a, b)
    keys = list(probs.keys())
    p = np.array([probs[k] for k in keys])
    p = p / p.sum()
    idx = rng.choice(len(keys), size=N, p=p)
    vals = np.array([keys[i][0]*keys[i][1] for i in idx])
    return vals.mean()

以 N=20000、a=(π/2,0)、b=(π/2,π/4) 为例,采样估计通常落在 0.70 附近,与 0.7071 的偏差量级约为 1/√N≈0.007,属于正常统计涨落。判断实现是否正确,应看偏差是否随 N 增大而收缩,而不是要求单次结果与解析值完全相等。若偏差长期停留在 0.1 以上,应优先检查方向向量归一化、张量积顺序(Alice 在前、Bob 在后)以及投影算符是否用错本征态。

调试建议:先固定 a=b=(0,0)(即 z 方向),此时 E 应等于 ⟨σz⊗σz⟩;再取 a=(0,0)、b=(π,0),E 应为其相反数。用这两个极端情形锁定符号约定,再推广到任意斜方向,可避免在角度与正负号上反复出错。

五、结果判读要点