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

使用状态向量初始化的量子电路调用inverse()报错,咨询能否求逆

问题解答

错误原因

你遇到的CircuitError: 'inverse() not implemented for reset.'是因为transpile工具将initialize操作分解为包含reset指令的电路。而reset属于非幺正操作,不存在对应的逆操作,因此调用inverse()时会触发错误。

核心问题答案

可以对基于状态向量初始化的量子电路执行求逆,但要求电路仅包含幺正操作。initialize本身对应一个幺正变换(将|0>态映射到目标态),但转译过程中引入的reset破坏了电路的幺正性,导致无法求逆。

解决办法

方法一:直接对未转译的initialize电路求逆

原始的initialize操作在Qiskit中被视为幺正门,无需转译即可直接求逆,代码示例:

desired_vector = [0., 0.5, 0., 0.5, 0., 0.5, 0., 0.5]
qr = QuantumRegister(3)
cr = ClassicalRegister(3)
qc = QuantumCircuit(qr, cr)
qc.initialize(desired_vector, qr)
# 直接对原始电路求逆
qc_inv = qc.inverse()

该逆电路会将目标态映射回|0>态,符合initialize操作的 adjoint 特性。

方法二:用StatePreparation构建纯幺正制备电路

如果需要转译后求逆,可使用StatePreparation门替代initialize,它会生成纯幺正的状态制备电路,转译时不会引入reset,代码示例:

from qiskit.circuit.library import StatePreparation

desired_vector = [0., 0.5, 0., 0.5, 0., 0.5, 0., 0.5]
qr = QuantumRegister(3)
cr = ClassicalRegister(3)
qc = QuantumCircuit(qr, cr)
# 使用StatePreparation生成纯幺正电路
qc.append(StatePreparation(desired_vector), qr)
backend = BasicAer.get_backend("qasm_simulator")
qc_transpiled = transpile(qc, backend)
# 转译后安全求逆
qc_inv = qc_transpiled.inverse()

内容的提问来源于stack exchange,提问作者Engr. Khuram Shahzad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:23:36