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

Qiskit中制备ψ=1/√2(|011⟩−|100⟩)状态出错的问题排查

问题根源:Qiskit的比特顺序(小端序)

你的问题完全是因为Qiskit采用小端序的态标签规则,和你计算时默认的大端序不匹配,既不是计算错误也不是噪声问题。

比特顺序的核心差异

  • 你手动计算时,把qubit 0当成了态标签的最高位(最左侧),比如|011⟩代表q0=0、q1=1、q2=1;
  • 但Qiskit里,qubit 0是态标签的最低位(最右侧),态标签格式为|q2 q1 q0⟩——也就是说,你理解的|011⟩对应Qiskit里的|110⟩,你要的|100⟩对应Qiskit里的|001⟩。

按Qiskit规则重新计算你的电路

初始化态是|000⟩(Qiskit:q2=0、q1=0、q0=0):

  1. 对q0加H门:H|000⟩ = (|000⟩ + |001⟩)/√2(Qiskit里|001⟩是q0=1,其余为0)
  2. 对q1加X门:X(|000⟩ + |001⟩)/√2 = (|010⟩ + |011⟩)/√2
  3. q0控q1的CNOT:
    • q0=0时,q1不变,保留|010⟩;
    • q0=1时,翻转q1,|011⟩变成|001⟩;
      结果:(|010⟩ + |001⟩)/√2
  4. q1控q2的CNOT:
    • q1=1时,翻转q2,|010⟩变成|110⟩;
    • q1=0时,q2不变,保留|001⟩;
      结果:(|110⟩ + |001⟩)/√2
  5. 对q0加Z门:
    • Z门只对q0=1的态取反,|001⟩变成-|001⟩;
      最终态:(|110⟩ - |001⟩)/√2

这个态和你测量到的(|001⟩ - |110⟩)/√2仅差一个全局相位,量子力学里全局相位无法观测,所以两者是等价的——也就是说,你的电路其实已经正确生成了你要的态,只是态标签的顺序和你预期的相反。

匹配预期显示的方案

如果想让测量结果的标签和你手动计算的一致,可以:

  • 测量后反转比特顺序:比如把得到的结果字符串反转,"001"变成"100","110"变成"011";
  • 或者重新设计电路时,把你原本的“高位qubit”对应到Qiskit的高编号qubit(比如把你计算里的q0换成Qiskit的q2)。

验证态矢量的代码

你可以直接打印态矢量确认:

from qiskit.quantum_info import Statevector

qc = QuantumCircuit(3)
qc.h(0)
qc.x(1)
qc.cx(0,1)
qc.cx(1,2)
qc.z(0)

state = Statevector(qc)
print(state)

输出会明确显示|110⟩的振幅是1/√2,|001⟩的振幅是-1/√2,和你要的态(比特反转后)完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:35:12