3. 布洛赫球与单量子比特态可视化
一个单量子比特的纯态可以写成 |ψ⟩ = α|0⟩ + β|1⟩,其中 α、β 是复数且满足 |α|² + |β|² = 1。这个式子虽然准确,但四个实数(α、β 各自的实部与虚部)减去两个约束(归一化、全局相位不可观测),真正独立的参数只有两个。布洛赫球正是把这两个自由度映射到三维空间中一个半径不超过 1 的球面上:球面上的每一点对应一个纯态,球内每一点对应一个混合态。理解这张"地图",就能把抽象的复数振幅变成可以直观比划的几何位置。
球面坐标与态参数的对应关系
布洛赫球采用球坐标 (r, θ, φ) 描述:r 是到球心的距离,取值 0 到 1;θ 是极角,从 +z 轴量起,范围 0 到 π;φ 是方位角,在 xy 平面内从 +x 轴逆时针量起,范围 0 到 2π。任意单量子比特态可写为
|ψ⟩ = cos(θ/2)|0⟩ + e^(iφ)·sin(θ/2)|1⟩
注意这里用的是 θ/2 而不是 θ,这是布洛赫球最容易出错的地方之一。由此得到布洛赫矢量:
x = sinθ·cosφ
y = sinθ·sinφ
z = cosθ
几个基准点必须记牢:|0⟩ 位于北极 (0,0,1),对应 θ=0;|1⟩ 位于南极 (0,0,-1),对应 θ=π;|+⟩=(|0⟩+|1⟩)/√2 位于 +x 轴 (1,0,0),对应 θ=π/2、φ=0;|−⟩ 位于 −x 轴;|+i⟩=(|0⟩+i|1⟩)/√2 位于 +y 轴,对应 φ=π/2;|−i⟩ 位于 −y 轴。赤道上的点都是 |0⟩ 与 |1⟩ 的等幅叠加,区别只在相对相位 φ。这里约定:z 轴向上为正,φ 从 +x 轴向 +y 轴方向增大,全文与图示保持一致。
用 Qiskit 绘制布洛赫球
Qiskit 提供了 plot_bloch_multivector 与 plot_bloch_vector 两个常用入口。前者接收一个态矢量(Statevector),自动计算并画出对应点;后者直接接收 [x, y, z] 坐标,适合手工验证。下面用 Qiskit 1.x 的写法演示:先构造 |0⟩、|1⟩、|+⟩ 和绕 y 轴旋转 π/3 后的态,再分别绘制。
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_bloch_multivector, plot_bloch_vector
import numpy as np
# 1) 直接构造 |+> 态
qc_plus = QuantumCircuit(1)
qc_plus.h(0)
sv_plus = Statevector(qc_plus)
print(sv_plus.data) # [0.7071+0.j, 0.7071+0.j]
# 2) 绕 y 轴旋转 pi/3:Ry(pi/3)|0>
qc_ry = QuantumCircuit(1)
qc_ry.ry(np.pi/3, 0)
sv_ry = Statevector(qc_ry)
print(sv_ry.data) # [cos(pi/6), sin(pi/6)] = [0.866, 0.5]
# 3) 绘制布洛赫球
plot_bloch_multivector(sv_plus)
plot_bloch_multivector(sv_ry)
# 4) 手工给出坐标验证
plot_bloch_vector([0, 0, 1], title="|0>")
对 Ry(π/3)|0⟩ 这个例子,可以手算验证:θ = π/3,φ = 0,于是 z = cos(π/3) = 0.5,x = sin(π/3) = 0.866,y = 0。也就是说,这个态在布洛赫球上位于 xz 平面内、从北极向 +x 方向偏转 60° 的位置。运行 plot_bloch_multivector(sv_ry) 后,箭头应指向 (0.866, 0, 0.5) 附近;如果箭头方向与手算不符,通常说明把 θ 与 θ/2 弄混了,或者把 φ 的起算轴搞错了。
从球面坐标反推态矢量
反过来,给定球面上一点,也能写出态。例如某点 θ = π/2、φ = π/2,则
|ψ⟩ = cos(π/4)|0⟩ + e^(iπ/2)·sin(π/4)|1⟩
= (1/√2)|0⟩ + i(1/√2)|1⟩
= |+i⟩
这与前面"|+i⟩ 在 +y 轴"的结论一致。再比如 θ = π/2、φ = π,得到 (|0⟩ − |1⟩)/√2 = |−⟩,位于 −x 轴。可见赤道上 φ 每增加 π/2,态就沿赤道逆时针转过 90°。这种"角度—态"的对应关系,是后续理解旋转门 Rx、Ry、Rz 几何作用的基础:Rx(α) 让布洛赫矢量绕 x 轴转 α,Ry(α) 绕 y 轴转,Rz(α) 绕 z 轴转。
常见误区与判读要点
- θ 与 θ/2 混用:态矢量里是 cos(θ/2)、sin(θ/2),布洛赫坐标里才是 cosθ、sinθ。写反会导致角度整体差一倍。
- 全局相位不可见:|ψ⟩ 与 e^(iγ)|ψ⟩ 在布洛赫球上是同一点。因此不能指望从球面位置读出整体相位,只能读出相对相位 φ。
- 球内点不是纯态:若 r < 1,说明是混合态,例如受噪声影响后的态;此时不能用单一 θ、φ 完整描述,需要密度矩阵。
- 测量会"塌缩"到两极:沿 z 轴测量时,结果只能是 |0⟩ 或 |1⟩,对应球面北极或南极,赤道上的叠加态在测量后不再保留。
plot_bloch_vector 依次画出 [0,0,1]、[0,0,-1]、[1,0,0]、[0,1,0]、[0,0,0.5] 五个点,观察前四个落在球面、最后一个落在球内 z 轴上的位置,体会"纯态在球面、混合态在球内"的区别。把布洛赫球当作单量子比特的"仪表盘":球面位置告诉你态的方向,到球心的距离告诉你纯度。掌握 θ、φ 与 α、β 的换算,再配合 Qiskit 的两条绘图命令,就能在写电路之前先在心里"看见"目标态,也能在运行结果出来后快速判断态是否偏离预期。