# 测量 · 为什么一测，叠加就没了

> 测量是量子计算里最诡异也最核心的操作：它把叠加态「拍」成一个确定的 0 或 1，概率由振幅的模平方决定，且不可逆。这一章用代码演示坍缩——包括「测两次结果必相同」的铁证——并讲清为什么量子程序必须靠采样统计。

- 作者：David（道雾轩）
- 专栏：写给程序员的量子计算（https://daiw.org/manual/quantum-computing.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/quantum-computing/measurement
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 测量 · 为什么一测，叠加就没了

上一章我们**偷看**了 qubit 的状态向量 `[0.707, 0.707]`。但那是模拟器给的「上帝视角」——**真实的量子计算机做不到**。在真机上，你想从 qubit 里拿到信息，只有一条路：**测量**。而测量，是量子世界里最反直觉的一步。

## 测量做了什么：坍缩

一个处于叠加态 $\ket{\psi} = \alpha\ket{0} + \beta\ket{1}$ 的 qubit，你去测量它：

- 你得到 **0**，概率是 $|\alpha|^2$；或者得到 **1**，概率是 $|\beta|^2$。（这条规则叫 **Born 定则**。）
- **关键**：测量之后，qubit 的状态**立刻坍缩**成你测到的那个——测到 0，它就**变成**了 $\ket{0}$；测到 1，就变成 $\ket{1}$。那个精妙的叠加，**一测就没了**，而且**回不去**。

<Callout type="warn">
  **你永远无法直接「读出」振幅 $\alpha$、$\beta$。** 测量只吐给你一个 0 或一个 1，并且顺手把叠加态毁掉。所以上一章 `Statevector` 打印出的完整状态，是**模拟器的特权**（它知道全部内幕）；真机上你拿不到——这也是为什么**量子程序主要在模拟器上调试**（[调试那章](https://daiw.org/manual/quantum-computing/debugging) 的核心）。这一条也解释了上一章的悬念：为什么不能「同时读出 $2^n$ 个答案」——因为一次测量只塌缩出**一个**结果，别的全没了。
</Callout>

## 用代码看坍缩：测两次，结果必相同

坍缩听着玄，但能用代码给出铁证。给一个叠加态的 qubit **连测两次**，看会怎样：

```python
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

qc = QuantumCircuit(1, 2)
qc.h(0)              # 叠加
qc.measure(0, 0)     # 第一次测量 → 坍缩
qc.measure(0, 1)     # 第二次测量 → 此时它已经是确定值了

sim = AerSimulator()
print(sim.run(transpile(qc, sim), shots=1000).result().get_counts())
```

```text
{'00': 501, '11': 499}
```

**注意：只有 `00` 和 `11`，从不出现 `01` 或 `10`。** 也就是说，两次测量的结果**永远一致**。第一次测量把叠加态坍缩成了 $\ket{0}$ 或 $\ket{1}$，第二次再测，它已经是个**确定值**了，当然给出同样的结果。这就是坍缩的直接证据——**叠加是「一次性」的，测一下就定死了。**

作为对照，一个确定态测多次毫无悬念：

```python
qc = QuantumCircuit(1, 1)   # 什么门都不加,qubit 就是 |0⟩
qc.measure(0, 0)
# → {'0': 1000}   永远是 0,没有随机性
```

## 所以：量子编程 = 概率实验 + 采样

坍缩带来一个深刻的工程后果，也是量子编程和经典编程最大的体感差异：

<Callout type="info">
  **你运行一次量子程序，只能得到一个样本，而不是一个确定答案。** 想知道「这个量子态的测量分布长什么样」，唯一办法是**把整个程序重复运行很多次**(`shots`)，每次都**从头制备、再测量一次**，然后**统计频率**。这就是为什么 [Hello Quantum](https://daiw.org/manual/quantum-computing/setup) 要 `shots=1000`——跑一次只会得到一个 0 或 1，看不出「五五开」；跑一千次统计，分布才浮现。

  **注意是「从头制备再测」，不是「测一个 qubit 一千次」**——后者因为坍缩，只会得到同一个值一千遍（如上面的演示）。每个 shot 都是一次独立的「制备 → 测量」实验。**量子算法的输出，本质是一个概率分布，你要靠采样去估计它。**
</Callout>

## 测量的「方向」：基

还有一层常被忽略：上面都是在所谓的**计算基（computational basis，也叫 Z 基）** 下测量——问的是「你是 $\ket{0}$ 还是 $\ket{1}$」。但你也可以换个「方向」问，比如在 **X 基**下测量——问「你是 $\ket{+}$ 还是 $\ket{-}$」。同一个量子态，**在不同的基下测，分布不同**。

实践中，换基测量是通过「**测量前先加一个门把要测的基旋转到计算基**」实现的（比如测 X 基，就先加个 H 门再测）。这个技巧在很多算法里是关键一步，现在先知道「测量是有方向的」即可，用到时再展开。

## 小结与下一章

测量把叠加态按 Born 定则（$P = |\text{振幅}|^2$）坍缩成一个确定的 0 或 1，不可逆、且毁掉叠加；我们用「测两次结果必相同」的代码给了坍缩铁证。因此量子程序是**概率实验**：靠多次「制备 → 测量」采样，才能还原输出分布。测量还有「基」的方向之分。

到这里，起步三章（环境、qubit、测量）搭好了地基：你会跑程序、能看状态、懂测量。第二站开始，我们系统地认识**操作 qubit 的积木——量子门**：X、H、Z 各自把状态怎么变，背后又是什么矩阵。👉 [单比特门：X、H、Z 与它们的矩阵](https://daiw.org/manual/quantum-computing/single-gates)。

## 参考文献

- [1] Qiskit 官方文档.「Measure qubits.」https://docs.quantum.ibm.com/guides —— 测量与 `shots`。
- [2] Scott Aaronson.「Quantum Computing Since Democritus」/ 讲义 —— 测量与 Born 定则的直觉。
- [3] Nielsen & Chuang.《Quantum Computation and Quantum Information》， §2.2 —— 测量公设与基。
