趋近智
编写代码来模拟量子态可以使数学表达变得具体。这些表达可以转化为执行向量 (vector)运算的 Python 脚本。量子比特通常使用狄拉克符号和矩阵乘法来描述。在编程环境中,我们可以构建一个量子线路。这个对象作为一个容器,承载了我们希望在量子比特上执行的一系列操作,包括初始化、门操作和测量。
一个基础的量子程序由三个阶段组成。首先,我们初始化系统。默认情况下,大多数量子软件开发工具包 (SDK) 会将量子比特初始化为基态 。其次,我们应用一系列量子门来操作状态向量 (vector)。最后,我们进行测量以使量子态坍缩,并将结果记录为经典比特(0 或 1)。
为了存储测量结果,我们的线路既需要量子寄存器(用于存放量子比特),也需要经典寄存器(用于存放输出)。
下图展示了一个标准单比特量子线路的流程。量子比特从左向右移动,在被测量之前经过一个量子门。
包含初始化、操作和测量的基础量子线路信息流。
我们从 Pauli-X 门开始。正如之前所确定的,X 门的作用是比特翻转。如果我们将其应用于初始化的状态 ,状态向量 (vector)会旋转到 。
在 Python 中,使用类似 Qiskit 等库的通用语法结构,实现步骤如下:
# 线路逻辑的伪代码表示
circuit = QuantumCircuit(1, 1) # 1 个量子比特,1 个经典比特
# 应用 Pauli-X 门
circuit.x(0)
# 测量量子比特 0 并存储在经典比特 0 中
circuit.measure(0, 0)
由于 X 门在从基态开始时是确定性的,因此结果是可以预见的。向量从 变换为 。如果我们在线路模拟器上运行,将以 100% 的概率得到结果 1。
当我们使用 Hadamard 门 () 时,其行为表现出量子力学特有的性质。这个门将量子比特置于均等叠加态。
当我们为此编写代码时,指令看起来与 X 门的例子相似,但计算结果却截然不同。
# 叠加态线路
circuit = QuantumCircuit(1, 1)
# 应用 Hadamard 门创建叠加态
circuit.h(0)
# 测量
circuit.measure(0, 0)
在这种情况下,量子比特处于一种测量得到 0 的概率为 ,测量得到 1 的概率同样为 0.5 的状态。
上述代码的一次执行只会产生一个二进制数字:0 或 1。这单个数据点并不能证明量子比特处于叠加态,它只告诉我们状态坍缩成了什么。为了验证概率振幅,我们必须多次执行该线路。
在量子编程中,我们定义一个通常称为 shots 的参数 (parameter)。这代表实验重复的次数。常见的重复次数有 1024、4096 或 8192。通过汇总多次重复的结果,我们可以构建概率分布。
如果我们以 1000 次重复运行 Hadamard 线路,我们预期大约得到 500 个 0 和 500 个 1。由于统计偏差,实际数字可能是 489 和 511,但随着重复次数的增加,它们会趋向于 50/50 分布。
下图显示了在模拟器上运行 1024 次 Hadamard 门实验的典型结果分布。
在基态应用 Hadamard 门后测量结果的统计分布。
我们可以将多个量子门串联在一起来执行更复杂的旋转。操作的顺序非常关键,因为矩阵乘法不满足交换律。先应用 X 门再应用 Hadamard 门产生的状态向量 (vector),与先应用 Hadamard 门再应用 X 门是不同的。
考虑操作序列 :
如果我们测量这个状态,概率仍然是 50/50,因为 Z 门只改变了相位(正负号),而没有改变振幅的大小。这凸显了测量的一个限制:我们无法通过标准的 Z 基测量直接观察到 和 之间的相位差异。我们需要在测量前应用另一个 Hadamard 门来区分这两个状态。
通过练习这些线路构建,你可以验证前几节中所做的线性代数预测。操作单量子比特的能力是迈向更复杂阶段的起点:让两个量子比特相互作用以创建量子纠缠。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造