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

使用Qiskit绘制目标量子叠加态时的布洛赫球结果异常排查

Qiskit布洛赫球绘制错误排查

你的代码逻辑中,布洛赫向量的转换公式完全错误,这是导致结果不符的核心原因。

问题分析

你期望得到的目标态是$\frac{|0\rangle-|1\rangle}{\sqrt{2}}$,电路逻辑是正确的:X|0⟩=|1⟩,H|1⟩=(|0⟩-|1⟩)/√2,模拟器输出的态矢量确实是正确的[1/√2, -1/√2]。但你错误地使用了不符合定义的公式计算布洛赫向量:

  • 原代码中bloch_vector = [2 * np.real(statevector[0]), 2 * np.imag(statevector[1]), 0]完全违背布洛赫向量的数学定义
  • 正确的单量子态布洛赫向量$(x,y,z)$计算公式为:
    $$
    \begin{align*}
    x &= 2\mathrm{Re}(\alpha^* \beta) \
    y &= 2\mathrm{Im}(\alpha^* \beta) \
    z &= |\alpha|^2 - |\beta|^2
    \end{align*}
    $$
    其中$|\psi\rangle = \alpha|0\rangle + \beta|1\rangle$

修正后的代码

from qiskit import QuantumCircuit, Aer, execute
from qiskit.visualization import plot_bloch_vector
import numpy as np

# Create a quantum circuit with one qubit
qc = QuantumCircuit(1)

# Apply a Hadamard gate to the |1> state
qc.x(0)  # Apply an X gate to get |1>
qc.h(0)  # Apply a Hadamard gate

# Simulate the circuit on the local qasm simulator
backend = Aer.get_backend('statevector_simulator')
job = execute(qc, backend)
result = job.result()
statevector = result.get_statevector()

# 正确计算布洛赫向量
alpha = statevector[0]
beta = statevector[1]
x = 2 * np.real(np.conj(alpha) * beta)
y = 2 * np.imag(np.conj(alpha) * beta)
z = np.abs(alpha)**2 - np.abs(beta)**2
bloch_vector = [x, y, z]

# Plot the Bloch vector on the Bloch sphere
plot_bloch_vector(bloch_vector).show()

额外优化

Qiskit提供了直接从态矢量生成布洛赫球的工具plot_bloch_multivector,可以省去手动计算布洛赫向量的步骤,代码更简洁:

from qiskit import QuantumCircuit, Aer, execute
from qiskit.visualization import plot_bloch_multivector

qc = QuantumCircuit(1)
qc.x(0)
qc.h(0)

backend = Aer.get_backend('statevector_simulator')
statevector = execute(qc, backend).result().get_statevector()

plot_bloch_multivector(statevector).show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:10:02