3. 量子门与操作符工程

在 Qiskit 中,量子门并不是抽象符号,而是可以被构造、组合、参数化并最终作用于量子态的操作符对象。理解“门即操作符”这一视角,是后续做态演化验证、噪声建模和电路优化的基础。本节围绕四类门的实现方式展开:标准门、参数化门、自定义门与复合门,并用 Operator 与 Statevector 两条路径验证它们对量子态的真实作用。

一、标准门:从门对象到矩阵

Qiskit 的标准门集中在 qiskit.circuit.library 中,例如 XGate、HGate、CXGate、RZGate 等。它们既是电路指令,也是可求矩阵的操作符。以单比特门为例,XGate().to_matrix() 返回 2×2 的泡利 X 矩阵,HGate().to_matrix() 返回 Hadamard 矩阵。对于受控门,CXGate().to_matrix() 返回 4×4 矩阵,其作用基顺序为 Qiskit 默认的 |q1 q0⟩(高位在前),这一点在手工核对矩阵时必须先明确,否则容易把控制位与目标位写反。

标准门的价值在于“语义明确、矩阵固定”。当我们需要验证一个电路是否等价于某个已知门时,可以直接比较 Operator(circuit) 与目标门的矩阵。例如构造 H 后接 H,其 Operator 应等于单位矩阵(允许全局相位差异时需用 Operator.equiv 判断)。

二、参数化门:把角度变成变量

参数化门是变分算法(VQE、QAOA)的核心。Qiskit 提供 RXGate(theta)、RYGate(theta)、RZGate(theta)、PhaseGate(theta) 以及双比特的 CRXGate(theta) 等。它们的特点是矩阵元素随参数连续变化,且参数可以在电路层面被绑定。

实现上通常有两种方式:一是直接实例化带具体数值的门,如 RYGate(0.7);二是先用 Parameter 占位,再通过 assign_parameters 绑定。后者更适合参数扫描。例如:

from qiskit.circuit import QuantumCircuit, Parameter
from qiskit.quantum_info import Statevector
import numpy as np

theta = Parameter('θ')
qc = QuantumCircuit(1)
qc.ry(theta, 0)
bound = qc.assign_parameters({theta: np.pi/2})
sv = Statevector(bound)
print(sv.probabilities_dict())  # 约 {'0': 0.5, '1': 0.5}

这里 RY(π/2) 把 |0⟩ 变成等幅叠加态,概率各约 0.5。注意 RY 的旋转约定:RY(θ)|0⟩ = cos(θ/2)|0⟩ + sin(θ/2)|1⟩,因此 θ=π/2 时振幅为 √2/2。若换成 RZ,由于它只改变相位,从 |0⟩ 出发概率不变,必须配合 H 等门才能观察到干涉效应。

三、自定义门:把子电路封装成可复用操作符

当一段子电路需要反复使用时,应把它封装为自定义门。Qiskit 提供两种主要途径:QuantumCircuit.to_gate() 生成无参数门,to_instruction() 生成可带参数的指令;若需要带参数并保留参数名,可用 QuantumCircuit.to_gate() 配合 Parameter,或使用 Gate 子类直接定义矩阵。

最直接的自定义方式是给定幺正矩阵:

from qiskit.circuit.library import UnitaryGate
import numpy as np

U = np.array([[0, 1], [1, 0]], dtype=complex)  # 等价于 X
my_gate = UnitaryGate(U, label='myX')
qc = QuantumCircuit(1)
qc.append(my_gate, [0])

用 Operator(my_gate) 可验证其矩阵确实等于 U。自定义门的工程意义在于:它把“实现细节”与“调用接口”分离,便于在更大电路中复用,也便于在转译时被目标后端识别或分解。

四、复合门:组合、分解与等价性验证

复合门是把多个门按顺序或并行组合成一个整体操作。Qiskit 中既可以用 qc.compose(other) 拼接电路,也可以用 Operator 做矩阵乘法验证。一个典型例子是:用 H、S、H 组合出 RY(π/2) 的等价效果(忽略全局相位)。验证流程是:分别构造两条电路,取 Operator,再用 Operator.equiv 判断是否在全局相位意义下相等。

下面这张图给出本节四类门的实现路径与验证关系:标准门直接取矩阵;参数化门先占位再绑定;自定义门由矩阵或子电路封装;复合门由多个门组合后整体求 Operator,最终都汇入 Statevector 或 Operator 两条验证通道。

四类量子门的实现路径与态演化验证 标准门 XGate / HGate / CXGate .to_matrix() 直接取矩阵 参数化门 RYGate(θ) / Parameter assign_parameters 绑定 自定义门 UnitaryGate / to_gate() 矩阵或子电路封装 复合门 compose / 多门组合 整体求 Operator QuantumCircuit 构造与参数绑定 qc.append(gate, qubits) / qc.compose(sub_circuit) Operator 通道 Operator(circuit) → 幺正矩阵 Operator.equiv(U1, U2) 判断全局相位意义下等价 Statevector 通道 Statevector(circuit) .probabilities_dict() 看概率 .data 看振幅与相位 矩阵等价 + 态概率/相位一致 → 门实现正确

五、态演化验证:从矩阵到概率与相位

验证一个门是否按预期工作,不能只看矩阵,还要看它作用到具体初态后的结果。Statevector 提供了最直接的观察方式。以 RY(π/2) 作用于 |0⟩ 为例,sv.probabilities_dict() 给出约 {'0': 0.5, '1': 0.5},而 sv.data 给出振幅 [0.707+0j, 0.707+0j]。若把 RY 换成 RZ,概率仍为 {'0': 1.0},但 sv.data 变为 [1+0j, 0+0j],说明 RZ 只改相位、不改布居。要观察 RZ 的相位效果,需在前后各加一个 H,形成干涉回路,此时概率会随 RZ 角度变化。

对于复合门,验证思路是“先等价、后演化”。先用 Operator.equiv 确认组合矩阵与目标门在全局相位下一致,再用 Statevector 确认对若干典型初态(|0⟩、|1⟩、|+⟩)的输出概率与相位一致。这样既覆盖了矩阵层面,也覆盖了物理可观测层面。

验证时注意:Operator.equiv 默认允许全局相位差异,而直接比较 np.allclose 矩阵元素则不允许。若两个门只差一个全局相位,物理上等价,但矩阵数值不同,应优先使用 equiv。

六、工程实践中的选择建议

标准门适合表达已知物理操作,参数化门适合变分与扫描,自定义门适合封装复用与后端适配,复合门适合构建高层算法模块。实际工程中,建议先用标准门和参数化门搭建原型,确认态演化正确后,再把稳定子电路封装为自定义门,最后用 Operator 与 Statevector 做回归验证。这样既保持了电路的可读性,也保证了操作符层面的正确性。

自定义门若直接由任意幺正矩阵构造,转译到真实后端时可能无法映射到原生门集,需要额外分解。工程上应优先用标准门组合出目标操作,仅在必要时才使用 UnitaryGate。