趋近智
编写 Python 代码生成 贝尔态是量子计算中的一项基本技能。这个过程包括将单量子比特叠加与 CNOT 门的多量子比特交互结合起来。
目标是创建一个电路,将默认状态 转换为纠缠态:
这种特定的状态代表了两个量子比特完全相关的场景。如果你测量第一个量子比特的结果为 0,第二个量子比特必然也是 0。如果你测量第一个量子比特为 1,第二个量子比特必然也是 1。你永远不会观察到 或 。
在编写代码之前,我们必须将操作序列可视化。要从初始状态创建纠缠,需要两个步骤。首先,将控制比特置于叠加态。其次,利用该叠加态来控制目标比特。
这个序列将两个量子比特紧密联系在一起。
生成标准贝尔态的操作流程。
我们将使用标准的量子软件开发工具包结构。这种逻辑在大多数 Python 量子库中都是一致的。我们为量子比特定义寄存器,按顺序应用量子门,然后模拟测量过程。
首先,我们初始化量子电路。我们需要两个量子比特来保存状态,以及两个经典比特来存储测量结果。
# 导入必要的组件
from qiskit import QuantumCircuit, Aer, execute
# 初始化一个具有 2 个量子比特和 2 个经典比特的量子电路
qc = QuantumCircuit(2, 2)
# 第 1 步:在第一个量子比特 (q0) 上应用 Hadamard 门
# 这会在 q0 上创建叠加态
qc.h(0)
# 第 2 步:应用 CNOT 门
# q0 是控制位,q1 是目标位
qc.cx(0, 1)
# 第 3 步:测量两个量子比特
# 将量子结果 q0 映射到经典比特 0
# 将量子结果 q1 映射到经典比特 1
qc.measure([0, 1], [0, 1])
# 显示电路图(可选的文本表示)
print(qc.draw())
执行绘图命令时,你应该会看到视觉确认:H 门应用于线路 q0,随后是一条连接 q0 和 q1 的垂直线,代表 CNOT 门。
在理想的数学模型中,测量到 的概率正好是 50%,测量到 的概率也正好是 50%。然而,当我们在模拟器(或真实的量子计算机)上运行它时,我们会多次执行实验以建立统计分布。这些重复次数通常被称为“采样数 (shots)”。
我们将运行电路 1,000 次并统计结果。
# 使用本地模拟器
backend = Aer.get_backend('qasm_simulator')
# 执行电路 1000 次
job = execute(qc, backend, shots=1000)
# 获取结果
result = job.result()
counts = result.get_counts(qc)
print("测量计数:", counts)
理解输出结果
你可能会看到类似这样的输出:
{'00': 492, '11': 508}
请注意结果中的两个细节。
首先,数字大致相等,但并不正好是每个 500。这是由于统计随机性造成的,类似于抛 1,000 次硬币。你很少会刚好得到 500 次正面和 500 次反面。
其次,也是最的一点,键值 '01' 和 '10' 缺失或计数为零。这种缺失确认了纠缠的存在。在一个非纠缠系统中,如果两个量子比特处于随机叠加态,你会预期看到所有四种组合 ()。而在这里,第二个量子比特的状态完全依赖于第一个量子比特。
我们可以将这些结果可视化,以便清楚地观察概率分布。下面的图表代表了我们贝尔态生成器的理想输出。
概率分布显示输出结果仅限于相关的状态。
我们上面使用的逻辑生成了 态。然而,总共有四个贝尔态。通过在应用纠缠序列(Hadamard + CNOT)之前稍微修改量子比特的初始状态,你可以生成其他三个贝尔态。
H + CNOT 序列充当了一个通用的“纠缠器”。你得到的具体相关性取决于输入。
例如,要创建 态 (),即结果总是相反的(01 或 10),你只需翻转目标量子比特,使其从 1 开始。
# Psi+ 贝尔态的电路
qc2 = QuantumCircuit(2, 2)
# 将 q1 初始化为 |1>
qc2.x(1)
# 开始纠缠序列
qc2.h(0)
qc2.cx(0, 1)
qc2.measure([0, 1], [0, 1])
如果你模拟 qc2,你会发现结果集中在 '01' 和 '10',而 '00' 和 '11' 消失了。这表明虽然输出状态不同,但纠缠的基本特性——量子比特之间的完全相关性——仍然是其核心特征。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造