量子比特 · 把 qubit 的状态打印出来看

经典 bit 只能是 0 或 1,量子比特(qubit)却能处于两者的「叠加」。这一章用 Qiskit 的状态向量把 qubit 的内部状态直接打印出来,配上刚好够用的数学,讲清振幅、概率,以及 n 个 qubit 为什么能装下 2ⁿ 个数。

作者 David更新于 第 2 篇(共 15 篇)

量子比特 · 把 qubit 的状态打印出来看

上一章那个 H 门,把 qubit「置于叠加态」。可叠加态内部到底长什么样?好在模拟器能让我们作弊——直接把 qubit 的完整状态打印出来看。这一章就这么干:先看到,再理解。

qubit 的状态,是一个向量

经典 bit 只有两个值:0 或 1。量子比特(qubit)的状态,是这两个「基础状态」的线性组合,写成向量最清楚。约定两个基础态:

∣0⟩=[10],∣1⟩=[01]\ket{0} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}, \qquad \ket{1} = \begin{bmatrix} 0 \\ 1 \end{bmatrix}

那个尖括号记号 ∣0⟩\ket{0}(读作「ket 0」)就是「状态 0」的意思——你先把它当成一个列向量的名字即可。一个一般的 qubit 状态是:

∣ψ⟩=α∣0⟩+β∣1⟩=[αβ]\ket{\psi} = \alpha\ket{0} + \beta\ket{1} = \begin{bmatrix} \alpha \\ \beta \end{bmatrix}

α\alpha、β\beta 是两个复数,叫振幅(amplitude)。经典 bit 是这个向量的两个特例(∣0⟩\ket{0} 或 ∣1⟩\ket{1});而 qubit 可以是任意满足下面这条归一化约束的组合:

∣α∣2+∣β∣2=1|\alpha|^2 + |\beta|^2 = 1

打印出来看

空口无凭。上一章那个过了 H 门的 qubit,它的 α\alpha、β\beta 到底是多少?用 Qiskit 的 Statevector 直接打印(注意:看状态时不要加测量——测量会破坏它,下一章说):

from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

qc = QuantumCircuit(1)
qc.h(0)                      # 只加 H,不测量
print(Statevector(qc))
Statevector([0.70710678+0.j, 0.70710678+0.j],
            dims=(2,))

两个振幅都是 0.707≈120.707 \approx \frac{1}{\sqrt{2}}。也就是说,H 门把初始的 ∣0⟩\ket{0} 变成了:

∣+⟩=12∣0⟩+12∣1⟩\ket{+} = \frac{1}{\sqrt{2}}\ket{0} + \frac{1}{\sqrt{2}}\ket{1}

这个「两个振幅相等」的叠加态太常用,有个专门的名字叫 ∣+⟩\ket{+}。作为对照,一个什么都没做的 qubit(初始就是 ∣0⟩\ket{0}):

print(Statevector(QuantumCircuit(1)))
# Statevector([1.+0.j, 0.+0.j], dims=(2,))   → 就是 |0⟩ = [1, 0]

现在「叠加」不再是玄学了——它就是那个 [0.707, 0.707] 向量,你亲眼看到了。

振幅不是概率,概率是振幅的模平方

这是最关键、也最容易搞混的一点:

振幅 α\alpha 本身不是概率;测量得到某个结果的概率,是对应振幅的「模平方」 ∣α∣2|\alpha|^2。 上面 ∣+⟩\ket{+} 的两个振幅都是 12\frac{1}{\sqrt{2}},所以测到 0 的概率是 ∣12∣2=12\left|\frac{1}{\sqrt{2}}\right|^2 = \frac{1}{2},测到 1 也是 12\frac{1}{2}——这正好解释了上一章那个「约五五开」的结果!

为什么强调这个区别?因为振幅可以是负数、甚至复数,而概率永远非负。振幅的正负号带来的相消 / 相长,是量子计算全部威力的来源(叫干涉,后面会专门玩)。如果只盯着概率,你会漏掉那个符号——而那个符号,才是魔法所在。

一个 qubit 两个数,n 个 qubit 呢

上面一个 qubit 的状态,要两个复数(α\alpha、β\beta)才能描述。那两个 qubit 呢?四个数(对应 ∣00⟩,∣01⟩,∣10⟩,∣11⟩\ket{00}, \ket{01}, \ket{10}, \ket{11} 四个基础态的振幅)。三个 qubit,八个数。规律是:

n 个 qubit 的状态,需要 2n 个振幅来描述n \text{ 个 qubit 的状态,需要 } 2^n \text{ 个振幅来描述}

这就是量子计算「指数级」威力的源头。 300 个 qubit 的状态,需要 23002^{300} 个振幅——这个数比宇宙里的原子总数还多,任何经典计算机都存不下。而一台量子计算机,用 300 个物理 qubit 就「装下」了这个状态,并能让一个门操作同时作用在所有 23002^{300} 个振幅上。

但先泼盆冷水:这不等于「量子计算机能同时算 2n2^n 个答案然后挑一个」——那是最常见的误解。测量时你只能得到一个结果,且是概率的。量子算法的精妙,在于用干涉让错误答案的振幅相消、正确答案的振幅相长,使你测量时大概率测到想要的那个。这个「怎么把答案『放大』出来」的门道,是算法那一站 的核心。

顺带:Bloch 球

单个 qubit 的状态还能画成一个球面上的点——Bloch 球。∣0⟩\ket{0} 在北极,∣1⟩\ket{1} 在南极,∣+⟩\ket{+} 在赤道上。量子门就是旋转这个球。Qiskit 能画:

from qiskit.visualization import plot_bloch_multivector
plot_bloch_multivector(Statevector(qc))   # 需要 matplotlib

Bloch 球是建立单比特直觉的好工具(调试那章 会用它来「看」门做了什么);不过多比特就画不下了(维度太高),那时得靠别的手段。

小结与下一章

qubit 的状态是一个振幅向量 α∣0⟩+β∣1⟩\alpha\ket{0}+\beta\ket{1},满足 ∣α∣2+∣β∣2=1|\alpha|^2+|\beta|^2=1;我们用 Statevector 把它打印了出来,亲眼确认了叠加就是 [0.707, 0.707]。记住那条铁律:概率 = 振幅的模平方,而振幅的正负号(相位)藏着量子计算的全部魔法。n 个 qubit 需要 2n2^n 个振幅——这是威力之源,但别误以为能「同时读出所有答案」。

我们一直在回避一件事:测量。上面看状态时特意「不加测量」,因为测量会把叠加态一把「拍死」成一个确定值。这个诡异又核心的操作,下一章讲透。👉 测量:为什么一测,叠加就没了。

参考文献

  • [1] Qiskit 官方文档.「Quantum states and Statevector.」https://docs.quantum.ibm.com/guides —— Statevector 用法。
  • [2] Michael Nielsen.「Quantum Computing for the Very Curious.」https://quantum.country/qcvc —— 面向初学者、极佳的振幅与测量直觉。
  • [3] Nielsen & Chuang.《Quantum Computation and Quantum Information》, §1.2 —— qubit 与态向量的正式定义。

本页目录