使用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
相关产品推荐
相关产品推荐

