4. 布洛赫球坐标与量子态参数的相互转换建模
任务拆解:从球面坐标到状态向量
布洛赫球把单量子比特纯态写成球面上的一个点,球坐标 (r, θ, φ) 与状态向量 |ψ⟩ = cos(θ/2)|0⟩ + e^{iφ} sin(θ/2)|1⟩ 一一对应。本例要建立双向转换函数,并重点处理两个极点 θ=0 与 θ=π:此时 φ 在物理上无定义,任何 φ 都给出同一状态,若直接由状态向量反解 φ 会得到 0/0 或数值噪声。建模策略是:正向转换始终输出规范化的 (θ, φ);反向转换在极点附近把 φ 置为约定值 0,并单独校验 r≈1。
正向转换:由状态向量求球坐标
给定归一化复振幅 α、β,先求 θ,再由两振幅的相位差求 φ。关键是用 atan2 而不是 arctan(Im/Re),后者在实部为 0 时会除零。θ 计算前把 2|α|²−1 裁剪到 [−1,1],防止浮点误差导致 acos 返回 NaN。
import numpy as np
def state_to_bloch(alpha, beta, tol=1e-9):
"""由归一化复振幅求布洛赫球坐标 (theta, phi)。"""
norm = abs(alpha)**2 + abs(beta)**2
if abs(norm - 1.0) > 1e-6:
raise ValueError(f"态未归一化: |α|²+|β|²={norm:.6f}")
# 用 2|α|²-1 求 cosθ,比直接取 |α| 更稳
cos_theta = np.clip(2.0 * abs(alpha)**2 - 1.0, -1.0, 1.0)
theta = np.arccos(cos_theta)
# 极点:β 或 α 的模接近 0,φ 无定义
if abs(beta) < tol or abs(alpha) < tol:
phi = 0.0
else:
phi = np.arctan2(np.imag(beta * np.conj(alpha)),
np.real(beta * np.conj(alpha)))
return theta, phi
注意 φ 取的是 β 相对 α 的相位差,即 arg(β·α*),这样整体相位被消去,结果只依赖物理上可观测的相对相位。
反向转换:由球坐标重建状态向量
反向转换直接套用定义式。θ 在 [0,π] 内时 cos(θ/2)、sin(θ/2) 均非负,无需额外符号处理;φ 在极点被约定为 0,重建出的态仍是正确的 |0⟩ 或 |1⟩。
def bloch_to_state(theta, phi):
"""由球坐标 (theta, phi) 重建归一化状态向量。"""
if not (0.0 <= theta <= np.pi):
raise ValueError(f"θ 超出 [0,π]: {theta}")
alpha = np.cos(theta / 2.0)
beta = np.exp(1j * phi) * np.sin(theta / 2.0)
return alpha, beta
边界情况验证
用一组覆盖极点、赤道与一般点的测试态做往返转换,检查重建态与原始态的保真度 |⟨ψ|ψ'⟩|² 是否接近 1,并确认极点处 φ 被规范为 0 而不产生 NaN。
def roundtrip_check(alpha, beta, label):
theta, phi = state_to_bloch(alpha, beta)
a2, b2 = bloch_to_state(theta, phi)
fid = abs(np.conj(alpha) * a2 + np.conj(beta) * b2)**2
ok = np.isfinite(theta) and np.isfinite(phi) and fid > 1 - 1e-9
print(f"{label:12s} θ={theta:.4f} φ={phi:.4f} 保真度={fid:.12f} {'通过' if ok else '失败'}")
return ok
cases = [
(1.0 + 0j, 0.0 + 0j, "北极 |0⟩"),
(0.0 + 0j, 1.0 + 0j, "南极 |1⟩"),
(1/np.sqrt(2), 1/np.sqrt(2), "赤道 φ=0"),
(1/np.sqrt(2), 1j/np.sqrt(2), "赤道 φ=π/2"),
(np.sqrt(0.7), np.sqrt(0.3)*np.exp(1j*2.1), "一般点"),
]
all_ok = all(roundtrip_check(a, b, n) for a, b, n in cases)
print("全部通过:", all_ok)
预期输出中,两个极点的 φ 均为 0.0000,保真度为 1.000000000000;一般点的 θ、φ 与构造时一致。若极点处出现 NaN 或保真度明显低于 1,说明 atan2 分支或裁剪逻辑被绕过。
极点判断阈值
tol 不宜过大:若设为 1e−3,会把接近极点的合法态误判为极点而丢失 φ 信息。建议取 1e−9 量级,仅拦截真正的数值零。往返转换只能验证到整体相位:|ψ⟩ 与 e^{iγ}|ψ⟩ 对应同一球面点。若业务需要固定全局相位,应在正向转换前先约定 α 为实数非负,否则往返后可能得到相差一个相位的等价态。