4. 量子门与单量子比特操作

在上一节里,我们已经知道一个量子比特的纯态可以写成 |ψ⟩ = α|0⟩ + β|1⟩,其中 α、β 是满足 |α|² + |β|² = 1 的复数。但光有“描述”还不够,量子计算真正有意思的地方在于:我们可以主动改变这个状态。完成这种改变的基本工具,就是量子门。本节聚焦单量子比特门,学习泡利门(X、Y、Z)、相位门(S、T)和 Hadamard 门,并在 Qiskit 中把它们作用到电路上,通过态向量观察结果。

一、量子门是什么:可逆的酉操作

量子门在数学上是一个酉矩阵 U,满足 U†U = I。酉性带来两个重要性质:一是操作可逆,二是保持态向量长度不变,因此概率总和仍为 1。单量子比特门就是 2×2 的酉矩阵,作用在态向量上就是一次矩阵乘法:|ψ'⟩ = U|ψ⟩。在 Qiskit 中,我们不需要手写矩阵,而是用门名把门“挂”到量子比特上,再由模拟器完成矩阵运算。

需要先约定一个贯穿全文的参照:我们采用 Qiskit 默认的计算基,|0⟩ 对应列向量 (1, 0)ᵀ,|1⟩ 对应 (0, 1)ᵀ,且所有门都按“左乘”作用,即先施加的门写在右边。这个约定在后面的矩阵和态向量结果中保持一致。

二、三类基本门的作用

泡利门是最基础的一组。X 门(比特翻转门)把 |0⟩ 和 |1⟩ 互换,矩阵为 [[0,1],[1,0]],它相当于经典逻辑里的非门;Z 门(相位翻转门)保持 |0⟩ 不变,但给 |1⟩ 加上一个负号,矩阵为 [[1,0],[0,-1]];Y 门则同时引入比特翻转和相位变化,矩阵为 [[0,-i],[i,0]]。三者都是自逆的,即 X² = Y² = Z² = I,连续作用两次回到原状态。

相位门只改变 |1⟩ 的相位而不改变测量概率。S 门给 |1⟩ 乘上 i,矩阵为 [[1,0],[0,i]];T 门给 |1⟩ 乘上 e^{iπ/4},矩阵为 [[1,0],[0,e^{iπ/4}]]。它们对 |0⟩ 毫无影响,因此单独作用在 |0⟩ 上时态向量不变,这一点在实验中很容易被误判为“门没生效”,需要特别注意。

Hadamard 门(H 门)是最常用的“制造叠加”工具,矩阵为 (1/√2)[[1,1],[1,-1]]。它把 |0⟩ 变成 (|0⟩+|1⟩)/√2,把 |1⟩ 变成 (|0⟩−|1⟩)/√2。H 门也是自逆的,连续两次 H 会回到原态。H 门与 Z 门配合,还能把相位信息“翻译”成可测量的比特信息,这是后续干涉类算法的关键。

单量子比特门作用与态向量变化(输入均为 |0⟩) 初始态 |0⟩ = (1, 0)ᵀ X 门 比特翻转 [[0,1],[1,0]] Z 门 相位翻转 [[1,0],[0,-1]] S 门 相位 π/2 [[1,0],[0,i]] T 门 相位 π/4 [[1,0],[0,e^{iπ/4}]] H 门 制造叠加 (1/√2)[[1,1],[1,-1]] 作用后态向量 |1⟩ (0, 1)ᵀ |0⟩ (1, 0)ᵀ 不变 |0⟩ (1, 0)ᵀ 不变 |0⟩ (1, 0)ᵀ 不变 (|0⟩+|1⟩)/√2 (0.707, 0.707)ᵀ 示例:H → Z → H 把相位差转成可测量的比特差 |0⟩ (1, 0)ᵀ H 后 (0.707, 0.707)ᵀ Z 后 (0.707, −0.707)ᵀ 再 H 后 (0, 1)ᵀ = |1⟩ 测量结果 100% 得到 1 相位门单独作用于 |0⟩ 时态向量不变,需借助 H 门把相位差转成比特差才能观测 注:以上数值为按矩阵乘法手算的示例结果,实际运行以 Qiskit 输出为准

三、在 Qiskit 中构建电路并查看态向量

Qiskit 的电路构建流程很直接:创建 QuantumCircuit,调用门方法,再用 Statevector 模拟器取出态向量。下面这段代码把 X、H、S 依次作用到同一个量子比特上,并打印最终态向量。

from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

qc = QuantumCircuit(1)
qc.x(0)      # |0⟩ → |1⟩
qc.h(0)      # |1⟩ → (|0⟩ − |1⟩)/√2
qc.s(0)      # 给 |1⟩ 分量乘 i

sv = Statevector(qc)
print(sv)
print(sv.probabilities_dict())

运行后,态向量大致为 [0.7071, −0.7071j],概率字典为 {'0': 0.5, '1': 0.5}。这里有两个值得注意的观察点:第一,概率各半说明 H 门确实制造了叠加;第二,第二个分量带 −j,这正是 S 门作用在 |1⟩ 分量上的结果,说明相位信息藏在复数里,而概率字典看不出来。要看到相位,必须直接读态向量,或者用 H 门做一次“相位转比特”的干涉操作。

如果想单独验证某个门,可以只放一个门再取态向量。例如只放 qc.z(0),输出仍是 [1, 0],概率字典为 {'0': 1.0}。这不是门失效,而是 Z 门对 |0⟩ 本就没有影响。把输入换成 |1⟩(先 qc.x(0) 再 qc.z(0)),态向量会变成 [0, −1],负号清晰可见。这个对比是理解“相位不可直接测量”的最好练习。

四、几个容易踩的坑

  • 门的顺序:Qiskit 按代码书写顺序从左到右施加,但矩阵表达是左乘,即最后写的门在最左边。手算验证时不要写反。
  • 全局相位:态向量整体乘一个 e^{iθ} 不改变任何测量结果,模拟器可能给出相差全局相位的等价结果,比较态向量时应关注相对相位而非绝对符号。
  • 测量会坍缩:一旦在电路里加了 measure,就不能再用 Statevector 取完整态向量,应改用 Aer 模拟器加 shots 统计结果。
  • 相位门对 |0⟩ 无效:S、T、Z 单独作用于 |0⟩ 时态向量不变,验证它们必须先把比特制备到 |1⟩ 或叠加态。
建议的练习路径:先用 X 门验证比特翻转,再用 H 门观察 (0.707, 0.707) 的叠加态,接着用 H→Z→H 观察相位如何变成确定的测量结果,最后用 S、T 门比较 e^{iπ/2} 与 e^{iπ/4} 在态向量上的差异。每一步都打印态向量和概率字典,形成“门—矩阵—态向量—概率”的对应直觉。

掌握这些单比特门之后,你就拥有了操控一个量子比特的全部基本“旋钮”:X 管比特,Z 管相位,H 负责在两者之间转换,S 和 T 提供更精细的相位调节。后续的多比特门与算法,都是在这个基础上叠加与组合出来的。