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

Qiskit模拟器运行量子电路时能否获取各步骤的中间态结果?

你给出的量子电路代码如下:

include "qelib1.inc";

qreg q[2];
creg c[2];

h q[0];
z q[0];
measure q[0] -> c[0];
问题解答

在经典量子电路模拟器上可以实现每一步的态矢量查询,真实量子硬件暂时不支持该操作。

原理说明

真实量子芯片运行电路时,受量子不可克隆原理、退相干效应限制,无法在不干扰量子态演化的前提下,直接读取中间步骤的完整态矢量;但经典侧的量子模拟器是通过数值计算模拟量子态演化,过程中所有中间态都有记录,可随时导出。

你的电路分步态矢量结果

你的电路初始为2量子比特|00>基态,分步演化结果如下:

  • 施加H门到q[0]后:
    态矢量为 $\frac{1}{\sqrt{2}}|00\rangle + \frac{1}{\sqrt{2}}|01\rangle$,数值形式为 [0.70710678+0.j, 0.70710678+0.j, 0.+0.j, 0.+0.j](排序为q[1]高位在前,q[0]低位在后)
  • 施加Z门到q[0]后:
    态矢量为 $\frac{1}{\sqrt{2}}|00\rangle - \frac{1}{\sqrt{2}}|01\rangle$,数值形式为 [0.70710678+0.j, -0.70710678+0.j, 0.+0.j, 0.+0.j]

具体实现方式

有两种常用的实现方案,都需要先移除电路末尾的measure测量指令,避免触发态坍缩:

方案1:拆分电路分段计算

每演化到你需要查询态的节点,就暂停运行导出当前态矢量,再用该态作为初始态继续后续电路演化,示例代码(基于Qiskit)如下:

from qiskit import QuantumCircuit, Aer, execute

simulator = Aer.get_backend("statevector_simulator")
qc = QuantumCircuit(2)

# 演化到H门后导出态
qc.h(0)
res_h = execute(qc, simulator).result()
state_h = res_h.get_statevector()
print("H门后态矢量:", state_h)

# 继续演化到Z门后导出态
qc.z(0)
res_z = execute(qc, simulator).result()
state_z = res_z.get_statevector()
print("Z门后态矢量:", state_z)

方案2:插入快照指令

大部分主流量子计算框架都支持快照功能,你可以直接在电路对应位置插入快照标记,运行后一次性导出所有快照点的态矢量,不需要拆分电路。

注意:如果你的电路包含噪声模拟,需要确认模拟器支持带噪声场景下的中间态导出,部分噪声模型会修改态矢量的存储逻辑。

内容的提问来源于stack exchange,提问作者modrozeleni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:30:04