You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在sympy.physics.quantum.gate中创建受控Z门及自定义受控量子门

SymPy量子受控门与自定义旋转门实现方案

受控Z门构造与报错修复

原代码报错核心原因是CGate传参格式错误:sympy.physics.quantum.gate.CGate的参数签名为CGate(控制比特序列, 目标比特位置, 目标门实例),三个参数需独立传入,不能打包为单个元组。

  • 单控制位受控Z门可直接使用内置类实现:CZ(control_bit, target_bit),例如控制位0、目标位1的CZ门直接写CZ(0,1),调用represent(CZ(0,1), nqubits=2)即可输出标准CZ矩阵。
    受控Z门矩阵示意图
  • 多控制位受控Z门(如双控CCZ门)的正确写法示例:
from sympy.physics.quantum.gate import CGate, Z
from sympy.physics.quantum import represent
# 控制位为0、1,目标位为2的三比特CCZ门
ccz = CGate((0,1), 2, Z(2))
# 输出验证8x8矩阵,对角元最后一位为-1,其余为1
print(represent(ccz, nqubits=3))

通用多控任意门构造方法

CGate天然支持嵌入任意合法的单/多量子比特门实例,不管是内置门还是自定义UGate都可以作为第三个参数传入,只需要保证目标门的作用比特位置和CGate传入的目标比特位置一致即可,完全满足多控制位、嵌入任意量子门的需求。

自定义X轴旋转门可参考如下修正后的实现,可直接配合受控逻辑使用:

from sympy import cos, sin, symbols, pi, I
from sympy.physics.quantum.gate import X, Z, UGate, CGate, Identity
from sympy.physics.quantum import represent

theta = symbols('theta', real=True)

def Rx(qubit_pos, angle=theta):
    """X轴旋转门
    Args:
        qubit_pos: 门作用的比特索引位置
        angle: 旋转角度,默认保留为符号变量theta
    Returns:
        UGate实例形式的Rx门
    """
    # 直接取内置单比特单位矩阵、泡利X矩阵,无需手动定义
    Id = represent(Identity(1), nqubits=1)
    X_mat = represent(X(0), nqubits=1)
    rot_matrix = cos(angle/2)*Id - I*sin(angle/2)*X_mat
    return UGate((qubit_pos,), rot_matrix)

# 构造单控Rx门:控制位0,目标位1,旋转角度pi/2
c_rx = CGate((0,), 1, Rx(1, angle=pi/2))
# 构造双控Rx门:控制位0、1,目标位2,旋转角度为符号变量theta
cc_rx = CGate((0,1), 2, Rx(2, angle=theta))

# 验证矩阵输出
print(represent(c_rx, nqubits=2))

其中用到的泡利X矩阵形式为:
$X = \begin{bmatrix}0& 1\1& 0\end{bmatrix} $

原代码运行报错属于参数传参格式错误,报错信息参考:
运行报错截图

补充说明

  • 若需要实现「控制位为0时触发门」的低电平有效受控门,可直接替换为CGateS类,传参逻辑和CGate完全一致。
  • 任意轴旋转门都可以参考Rx的写法,替换对应旋转矩阵的生成逻辑即可,都可以直接传入CGate作为受控目标门。

内容的提问来源于stack exchange,提问作者Dara O h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:36:22