4. 量子测量与概率分布
量子计算与经典计算最本质的差异之一,在于测量行为本身会改变量子态。一个量子比特在测量前可以处于 |0⟩ 与 |1⟩ 的叠加态 α|0⟩+β|1⟩,而一旦执行测量,它就会以概率 |α|² 坍缩到 |0⟩,以概率 |β|² 坍缩到 |1⟩。因此,量子程序的输出天然是概率性的:单次运行只能得到一个确定结果,只有通过大量重复测量(shots),才能从统计频率中逼近真实的概率分布。本节的核心任务,就是在 Qiskit 中完成这一过程,并把模拟得到的频率与理论概率进行对照。
一、理论概率从哪里来
在 Qiskit 中,量子线路由量子门构成,量子态由态矢量或密度矩阵描述。对于最简单的单量子比特叠加态,我们常用 Ry(θ) 门来制备:
Ry(θ)|0⟩ = cos(θ/2)|0⟩ + sin(θ/2)|1⟩
由此可得测量到 |0⟩ 的理论概率为 P(0)=cos²(θ/2),测量到 |1⟩ 的理论概率为 P(1)=sin²(θ/2)。例如取 θ=π/3(即 60°),则 P(0)=cos²(30°)=0.75,P(1)=sin²(30°)=0.25。这两个数值就是后续对比的“理论值”。需要强调的是,理论值来自量子力学的数学形式,而不是模拟器给出的结果;模拟值只是对理论值的一次有限次采样估计。
二、在Qiskit中实现多次测量
Qiskit 的采样流程可以概括为:构建量子线路 → 添加测量 → 选择后端 → 指定 shots → 执行并获取计数。下面给出一个可直接运行的示例,使用 Aer 模拟器完成 4096 次测量:
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
import numpy as np
theta = np.pi / 3
qc = QuantumCircuit(1, 1)
qc.ry(theta, 0) # 制备叠加态
qc.measure(0, 0) # 测量并写入经典寄存器
sim = AerSimulator()
compiled = transpile(qc, sim)
result = sim.run(compiled, shots=4096).result()
counts = result.get_counts()
print(counts) # 例如 {'0': 3078, '1': 1018}
这里有几个关键点。第一,measure(0, 0) 把量子比特 0 的测量结果写入经典比特 0,这是获得计数结果的前提。第二,shots=4096 表示重复运行并测量 4096 次,shots 越大,频率越接近理论概率,但不会无限逼近,因为采样本身存在统计涨落。第三,get_counts() 返回的是字典,键为测量结果字符串,值为出现次数。
把计数换算为频率,就得到模拟概率分布:
total = sum(counts.values())
p0_sim = counts.get('0', 0) / total
p1_sim = counts.get('1', 0) / total
print(p0_sim, p1_sim) # 例如 0.7515, 0.2485
三、概率分布的可视化与对比
仅看两个数字不够直观,通常用柱状图同时展示理论值与模拟值。Qiskit 提供 plot_histogram,也可以直接用 Matplotlib 绘制对比图。下面给出一个对比示例(数值为示例性结果,用于说明分析方法):
| 测量结果 | 理论概率 | 模拟频率(4096 shots) | 绝对偏差 |
|---|---|---|---|
| |0⟩ | 0.7500 | 0.7515 | 0.0015 |
| |1⟩ | 0.2500 | 0.2485 | 0.0015 |
偏差很小,说明模拟结果与理论一致。但要注意,偏差大小与 shots 数量直接相关。若把 shots 降到 100,可能出现 0.78 与 0.22 这样的频率,偏差明显增大;若提高到 100000,频率通常会更贴近 0.75 与 0.25。这正是“大数定律”的体现:独立重复试验次数越多,频率越稳定地收敛到概率。
四、如何判断模拟值与理论值是否一致
对比时不能只看“像不像”,而应给出可量化的判断依据。常用方法有三种。第一种是绝对偏差:|P_sim − P_theory|,如上表中为 0.0015,直观但缺少统计显著性。第二种是标准差估计:对于二项分布,单次测量结果的标准差约为 √(P(1−P)/shots)。以 P=0.75、shots=4096 为例,标准差约为 √(0.75×0.25/4096)≈0.0068,因此 0.0015 的偏差远小于一个标准差,属于正常涨落。第三种是多次重复实验,观察频率是否围绕理论值波动,而不是单调偏离。
实用判断准则:当 shots ≥ 1000 时,若模拟频率与理论概率的偏差在 2~3 倍标准差以内,可认为结果与理论一致;若偏差持续超过 3 倍标准差,应检查线路制备、测量映射或后端噪声设置是否正确。
五、扩展到多量子比特与真实噪声
上述方法可直接扩展到多量子比特。例如制备 Bell 态 (|00⟩+|11⟩)/√2,理论概率为 P(00)=0.5、P(11)=0.5、P(01)=P(10)=0。在理想模拟器上,4096 shots 下通常只会出现 00 和 11,频率各约 0.5。但如果使用带噪声模型的后端,或运行在真实量子硬件上,就可能出现少量 01 和 10,这反映了退相干、门错误和读出错误的影响。此时“理论值”应理解为理想无噪声概率,而“模拟值”则包含噪声效应,两者的偏差本身就是评估硬件质量的重要指标。
常见误区:把单次运行结果当作概率。单次测量只能得到 0 或 1,不能说明概率分布;必须通过 shots 重复采样。另一个误区是认为 shots 越大结果一定越“准”,实际上 shots 只降低统计涨落,不能消除系统性误差(如读出错误、态制备错误)。
六、可复用的实验记录表
为了便于对比不同 θ 和 shots 下的结果,可以按下面的字段记录每次实验。表中数值为示例,实际运行时请替换为自己的测量结果。
| θ | shots | P(0) 理论 | P(0) 模拟 | P(1) 理论 | P(1) 模拟 | 最大偏差 |
|---|---|---|---|---|---|---|
| π/6 | 1024 | 0.9330 | 0.9287 | 0.0670 | 0.0713 | 0.0043 |
| π/4 | 2048 | 0.8536 | 0.8560 | 0.1464 | 0.1440 | 0.0024 |
| π/3 | 4096 | 0.7500 | 0.7515 | 0.2500 | 0.2485 | 0.0015 |
| π/2 | 8192 | 0.5000 | 0.4988 | 0.5000 | 0.5012 | 0.0012 |
从表中可以看出,随着 shots 增大,最大偏差整体呈下降趋势,这与统计涨落随样本量增大而减小的规律一致。同时,θ=π/2 时理论概率为 0.5/0.5,模拟值也最接近均匀分布,说明 Ry 门对叠加态的控制是准确的。通过这样一组实验,读者不仅掌握了 Qiskit 多次测量的实现方法,也建立了“理论概率—模拟频率—统计偏差”三者之间的定量联系,为后续更复杂的量子算法验证打下基础。