量子比特Qubit与叠加原理-P2

📑 目录

1. 量子比特(Qubit)与叠加原理 (Part 2)

测量与行为

在量子信息里,“测量”不是被动读取,而是会改变系统的相互作用。我们既需要数学模型来描述它,也需要理解它对实验与工程的影响。本节从投影测量出发,扩展到更一般的POVM框架,解释坍缩、重复测量与去相干,并给出门级操作与代码示例。

1. 投影测量(Born 规则与坍缩)

给定一个纯态 |ψ⟩ = α|0⟩ + β|1⟩,若我们以计算基 {|0⟩, |1⟩} 进行投影测量,结果为:

  • 0 的概率:p(0) = |⟨0|ψ⟩|^2 = |α|^2
  • 1 的概率:p(1) = |⟨1|ψ⟩|^2 = |β|^2
  • 坍缩效应:测量到某结果时,态瞬时变为对应的本征态,即若测到 0,|ψ⟩ → |0⟩;若测到 1,|ψ⟩ → |1⟩

这一过程有两个关键性质:

  • 概率性:单次测量只返回一个结果,信息是统计的
  • 不可克隆性:量子态不可复制,因此你不能靠“重复测量”把一个态“拷贝”出来而获得更多信息

直观上,测量把量子态的“可能性”转化为“确定结果”,并消耗了态的相干性。

示意(mermaid):

flowchart LR
  A["Quantum circuit output |ψ⟩ = α|0⟩+β|1⟩"] --> B["Measurement operators M0=|0⟩⟨0|, M1=|1⟩⟨1|"]
  B --> C{Measurement result}
  C -->|0| D["Collapse to |0⟩"]
  C -->|1| E["Collapse to |1⟩"]
  D --> F["p= |α|²"]
  E --> G["p= |β|²"]

2. POVM:更一般的测量框架

投影测量把态投影到本征空间;而POVM(Positive Operator-Valued Measure)允许我们只关心“事件发生的概率”,而未必把态投影到某个纯态本征空间。它用一组半正定算符 {E_i} 满足 ∑_i E_i = I 描述测量事件:

  • 概率:p(i) = ⟨ψ|E_i|ψ⟩
  • “Kraus”表示:E_i = M_i^† M_i,其中 {M_i} 是测量通道的Kraus算符

例如,把投影测量视作POVM时,取 M0 = |0⟩⟨0|、M1 = |1⟩⟨1|,则 E0 = M0^† M0 = |0⟩⟨0|、E1 = |1⟩⟨1|,与投影一致。

POVM的优势:

  • 可设计“保真度测量”或“无塌缩测量”,只提取统计信息
  • 在噪声或部分观测场景中更贴近实验建模(见下一小节)

3. 重复测量与去相干(可重现性与噪声)

  • 重复测量会破坏相干性:一旦坍缩到 |0⟩ 或 |1⟩,重复同方向的测量会得到相同结果(直到外部噪声把态再次变为混合态)。
  • 去相干(dephasing):系统与环境的相互作用导致相干项衰减,使态逐渐变为混合态。例如 ρ = |α|^2|0⟩⟨0| + |β|^2|1⟩⟨1|,纯态相干项 αβ* 消失。此时再测Z基,概率与Born规则一致,但已不再是纯态。
  • 工程影响:实际设备有T1/T2等退相干时间,若测量前态已部分去相干,实际概率与理想Born值会有偏差;错误缓解与纠错需要显式建模这些通道。

小例子:Z基测量

  • |+⟩ = (|0⟩+|1⟩)/√2,测Z基:p(0)=p(1)=1/2;若先施加去相干通道把|ψ⟩变为混合态ρ,测Z基仍得到1/2,但再测其他基(如X基)结果不再干涉。

4. 门级操作与测量(以Qiskit为例)

在量子电路里,测量对应“把态的振幅转为经典寄存器”,本质是投影测量(配合去相干)。

Qiskit 代码示例(Python):

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

qc = QuantumCircuit(1, 1)
qc.h(0)                 # 制备 |+⟩ = (|0⟩+|1⟩)/√2
qc.measure(0, 0)        # Z基测量

backend = Aer.get_backend('qasm_simulator')
job = execute(qc, backend, shots=1024)
counts = job.result().get_counts(qc)
print(counts)           # {'0': ~512, '1': ~512}
plot_histogram(counts).show()

说明:H门后测Z基,均匀概率;多次采样才能看到统计分布。

5. 不同测量方向的直观解释(Z基 vs X基)

  • Z基测量:以 {|0⟩, |1⟩} 为本征态
  • X基测量:以 |+⟩ = (|0⟩+|1⟩)/√2 和 |-⟩ = (|0⟩-|1⟩)/√2 为本征态;等价于先施加H门,再测Z基

代码示例(测X基):

qc = QuantumCircuit(1, 1)
qc.h(0)                 # 从Z基变到X基
qc.measure(0, 0)        # 现在测量的是|+⟩/|-⟩

job = execute(qc, backend, shots=1024)
counts = job.result().get_counts(qc)
print(counts)           # 对|+⟩ 测X基:'0'≈1024

6. POVM实验建模:测量算符M_i与E_i

示例:在Qiskit中实现等概率三分量的POVM(忽略归一化)

import numpy as np
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import random_statevector

def my_povm_outcomes(state):
    # 简化示例:设计M_i使 ∑ E_i = I
    M0 = np.array([[0.8, 0.0], [0.0, 0.0]])
    M1 = np.array([[0.2, 0.0], [0.0, 0.8]])
    M2 = np.array([[0.0, 0.0], [0.0, 0.2]])

    E0 = M0.conj().T @ M0
    E1 = M1.conj().T @ M1
    E2 = M2.conj().T @ M2
    # 模拟概率
    probs = [np.real(state.conj() @ E0 @ state),
             np.real(state.conj() @ E1 @ state),
             np.real(state.conj() @ E2 @ state)]
    return probs

叠加与量子电路基础

叠加与量子电路基础

在上一节中,我们从抽象的向量空间理解了量子态与叠加的本质;现在让我们把目光投向“可计算”的层面——量子电路。我们将看到:量子门如何把数学运算转译为态的物理演化;如何从 |0⟩ 出发,用几个基本门就搭建出丰富的叠加态;以及多比特叠加如何将计算空间“指数式”扩张,为并行计算与干涉提供舞台。

为便于快速查阅,先给出单量子比特门的对照表(矩阵采用计算基 |0⟩、|1⟩ 表示):

作用与直观矩阵表示备注
H (Hadamard)在 X、Z 基之间“均衡”叠加(1/√2)[[1, 1],[1, -1]]制备均匀叠加与干涉关键
X (Pauli-X)翻转比特[[0, 1],[1, 0]]类似经典 NOT
Y (Pauli-Y)翻转并引入 π/2 相位[[0, -i],[i, 0]]常用于相位校正
Z (Pauli-Z)1⟩ 取负号[[1, 0],[0, -1]]
R_z(θ)绕 Z 轴旋转[[e^{-iθ/2}, 0],[0, e^{iθ/2}]]只改变相对相位

Bloch 球表示把量子态几何化:任意纯态可视作球面上的一点(θ, φ),对应 |ψ⟩ = cos(θ/2)|0⟩ + e^{iφ} sin(θ/2)|1⟩。Bloch 球有助于理解“旋转门”的意义:R_z(θ) 沿 Z 轴旋转,改变 φ 但不改变 θ;R_x(θ)、R_y(θ) 则改变 θ,从而改变在 X/Y 基上的概率。

下面给出量子电路图的基本记法示例(单比特门+测量):

graph LR
  A["q0: |0⟩"] --> B["H"]
  B --> C["Meas Z"]
  D["Z 基测量结果"]
  C --> D

以及两比特均匀叠加的电路图:

graph LR
  A["q0: |0⟩"] --> B["H"]
  C["q1: |0⟩"] --> D["H"]
  E["叠加态 |ψ⟩ = (|00⟩+|01⟩+|10⟩+|11⟩)/2"]
  B --> E
  D --> E

1. 单比特门如何作用于叠加

  • H 门制备均匀叠加 |+⟩:
    H|0⟩ = (|0⟩+|1⟩)/√2
    在 Z 基测量,|0⟩ 与 |1⟩ 概率均为 1/2;如改为 X 基测量,|ψ⟩≈|0⟩ 概率为 1。
  • X 门翻转:
    X|0⟩ = |1⟩,X|1⟩ = |0⟩
    把 H 之后的 |+⟩ 再施 X,得到 |−⟩ = (|0⟩−|1⟩)/√2,Z 基概率仍各半,但在 X 基测量时得到 |1⟩ 的概率为 1。
  • Z 与 R_z 控制相位:
    Z|1⟩ = −|1⟩,Z|0⟩ = |0⟩。更一般的 R_z(θ) 在 |1⟩ 上乘以 e^{iθ/2},在 |0⟩ 上乘以 e^{-iθ/2},改变相对相位而不出 Z 基概率。
    相对相位会决定干涉的方向:例如 H 后接 Z 再接 H,相当于在 X 基上施加相位翻转,导致输出概率从 1:1 变为 0:1(概率迁移)。

Bloch 球上的直观:R_x(π/2) 让北极点转至 X 轴中点;R_z(φ) 沿赤道旋转,改变经度但不到达南北极;Y 门等价于 R_y 与 R_z 的组合。

代码示例(Qiskit 伪代码,仅展示用法,不在本文环境执行):

# 1) 制备 |+⟩ 并在 Z 基测量
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

qc = QuantumCircuit(1)
qc.h(0)
qc.measure_all()
sim = AerSimulator()
job = sim.run(transpile(qc, sim), shots=1024)
counts = job.result().get_counts(qc)
print(counts)  # 期望看到 0/1 各约 0.5

# 2) H + Z + H:演示相位如何改变 X 基概率(通过两轮 Z 基测量推断)
qc2 = QuantumCircuit(1, 1)
qc2.h(0)
qc2.z(0)  # 改变相对相位
qc2.h(0)
qc2.measure(0, 0)
job2 = sim.run(transpile(qc2, sim), shots=1024)
counts2 = job2.result().get_counts(qc2)
print(counts2)  # 期望看到结果偏向单一值,体现干涉

2. 相位与旋转:为什么相位能“指挥”概率

量子计算的“戏法”在于干涉:若将叠加看作两条“路径”(0 与 1),门的相位会决定两条路径的相对相位;当再次投影到某基时,这些相位会让振幅“相加”或“相消”,从而改变测量概率。相位本身不是可观测量(全局相位不改变任何可观测量),但相对相位很重要。

  • 在 X 基测量中,H 门把 Z 基态映射到 X 基;因此在 H+H 的序列中,中间环节的 Z/R_z 改变了在 X 基上的概率。
  • R_z(θ) 在 Bloch 球上仅改变经度 φ;当我们随后进行 H(相当于绕某轴的特定旋转),φ 的变化会被投影到 X 基上,表现为概率的迁移。

这也是“相位反冲(phase kickback)”的直观来源:在某些算法(如 Deutsch)里,函数调用门会让相位“留在输入寄存器”,并通过后续 H 的干涉“放大”为可见的判定结果。

3. 多比特叠加:从 |00⟩ 到 |ψ⟩ 的指数扩张

两比特计算基为 |00⟩, |01⟩, |10⟩, |11⟩,对应复系数 (α, β, γ, δ),归一化约束为 |α|^2 + |β|^2 + |γ|^2 + |δ|^2 = 1。

最常见的叠加制备方式是对每个比特施加 H:

graph LR
  A["q0: |0⟩"] --> B["H"]
  C["q1: |0⟩"] --> D["H"]
  E["|ψ⟩ = (|00⟩+|01⟩+|10⟩+|11⟩)/2"]
  B --> E
  D --> E

典型案例与直观例子

这一节通过四个紧密相连的案例,把“量子比特与叠加原理”落到可操作、可看见、可理解的具体电路与测量上。每一个例子都对应一个可运行的门序列,我们也会在文末给出可执行的 Python/Qiskit 示例代码,帮助你在本地复现实验。

抛硬币量子版:H 门制造“均匀叠加”并测量

最直观的量子态制备,来自单比特的 Hadamard 门。它把确定态 |0⟩ 变成“等概率叠加”的 |+⟩ = (|0⟩+|1⟩)/√2。此时测量一次,你会得到 0 或 1 的概率各为 1/2,就像一枚公平硬币的投掷结果。

  • 电路:H |0⟩ → |+⟩ → 测量
  • 数学:|ψ⟩ = H|0⟩ = (|0⟩+|1⟩)/√2,Born 规则给出 Pr(0)=Pr(1)=1/2
q0: ──H──M──
     0    0|1

直观结论:叠加意味着“可以测到 0 也可以测到 1”,但不是“同时是 0 又是 1”。可测量结果仍是 0 或 1,概率由系数的模平方决定。

叠加的并行计算:一次“同时作用”于所有输入

量子叠加不是“并行算”的口号,而是线性代数的结果。考虑函数 f: {0,1}→{0,1},两比特系统(x 为控制,y 为辅助):

  • 初始:H 作用在 x 上,使 x 进入均匀叠加;y 置为 |0⟩。
  • 施加 U_f:|x⟩|y⟩ → |x⟩|y⊕f(x)⟩,即把 f(x) 叠加在辅助比特上。
  • 结果:叠加输入“同时”经过同一个 U_f 作用,但最终测量时只能返回一个结果。

举例:f(x) = x(恒等),|ψ⟩ = |0⟩|0⟩ + |1⟩|0⟩;U_f 作用后变为 |0⟩|0⟩ + |1⟩|1⟩。如果直接测量 x,你会得到 0 或 1;如果测量 y,则会看到 y = x 的结果。

  • 电路:H_x ⊗ I_y + U_f
x: ──H──Uf──
y: ──I───

直观结论:量子“并行”是代数的“同时作用”,不是“同时读出全部答案”。它为后续的干涉与判定问题提供了强大的基础。

干涉的威力:相位差改变测量概率

叠加只是起点;真正的“量子加速”来自相位干涉。相位可以来自门(如 H、Z、S、T、Rz),也可以来自问题结构(如 Oracle)。

两个代表性电路:

  • A:H → Z → H:从 |0⟩ 出发,最终总回到 |0⟩(确定性)
  • B:X → H → Z → H:翻转到 |1⟩ 后再处理,最终总是回到 |1⟩

数学上,这相当于把 |0⟩ 与 |1⟩ 的相位改变后再次叠加,符号变化导致测量概率从 0 或 1 切换。这说明“相位”的操控可以决定“测量结果”。

A: q0: ──H──Z──H──M──
     0      0|1
B: q0: ──X──H──Z──H──M──
     0      1|0

直观结论:把叠加想象成“波的叠加”,相位就是“波的相对方向”。当方向相同时,测量概率被放大;方向相反时,概率被抵消。干涉是量子算法“选对路径、抵消错误”的核心。

相位反冲与 Deutsch–Jozsa 思路:一类“一次查询判定”的量子算法

相位反冲(phase kickback)是量子计算中最直观的“相位源自问题结构”的机制。其要点在于:Oracle U_f 把 |x⟩|y⟩ 映射为 |x⟩|y⊕f(x)⟩。当辅助比特 y 处于 |−⟩ = (|0⟩−|1⟩)/√2 时,U_f 在 x 上施加全局相位 (−1)^f(x) 而不改变 x 的振幅分布。于是:

  • 输入在叠加中对所有 x 施加相同振幅,但通过相位携带 f(x) 的信息。
  • 再次对 x 做 H 门,利用干涉让“常数函数”(所有 f(x) 相同)和“平衡函数”(f(x)=0 与 f(x)=1 各占一半)在最终测量中呈现不同分布。

简化的两比特电路与流程:

x: ──H──Uf──H──M──
y: ──X──H──Uf(H)─H──M──  注:第二行是“辅助位初始化与相位反冲”的简化表达

直观解释:

  • 常数函数:f(0)=f(1),所以 (−1)f(0)=(−1)f(1),干涉将测量结果集中在 x=0。
  • 平衡函数:f(0)≠f(1),相位相反,干涉将测量结果集中在 x=1。

直观结论:相位反冲将“函数值信息”编码到可控的相位上,干涉负责把“不可直接测量的信息”转化为“测量时的可区分结果”。这正是许多量子算法的共同结构:相位编码 + 干涉放大。

与经典对比:为什么这些例子重要

  • 抛硬币量子版强调:叠加是概率的“可计算空间”,但测量仍是单次、不可复制。
  • 叠加的并行计算强调:一次作用到所有输入是可行的,但结果需靠测量与干涉筛选。
  • 干涉与相位反冲强调:通过控制相位与路径,量子算法能在更少的查询下得到判定。

关键术语快速回顾

  • 叠加:线性组合态,|ψ⟩ = α|0⟩ + β|1⟩,|α|^2 + |β|^2 = 1
  • 测量坍缩:测量让态坍缩到某个基态,结果概率由 Born 规则给出
  • Hadamard 门:制备/消除叠加的核心单比特门
  • 相位门:Z、S、T、Rz(θ),用于操控相位并影响干涉
  • Oracle:U_f |x⟩|y⟩ → |x⟩|y⊕f(x)⟩,编码问题结构
  • 相位反冲:辅助位在 |−⟩ 态下让主位获得 (−1)^f(x) 的相位

可复现的 Python/Qiskit 示例(本地实验)

以下示例在本地安装 Qiskit 后可直接运行。它们对应文中的四个典型案例。

  • 安装(可选):pip install qiskit qiskit-aer

1. 抛硬币量子版:H |0⟩ 测量

from qiskit import QuantumCircuit, transpile
from qiskit.visualization import plot_histogram
from qiskit_aer import AerSimulator
from collections import Counter

# 构建电路:H 门 + 测量
qc = QuantumCircuit(1, 1)
qc.h(0)
qc.measure(0, 0)

sim = AerSimulator()
job = sim.run(transpile(qc, sim), shots=1024)
counts = job.result().get_counts()
print(counts)  # 期望看到 0/1 各约 0.5

与经典信息的对比

量子信息理论与经典信息理论之间存在着本质性的差异,这些差异不仅是数学形式上的不同,更反映了两种计算范式的根本区别。通过深入的对比分析,我们可以更好地理解量子计算的优势与局限性。

信息表示与存储方式

经典比特的确定性表示

经典比特是确定性的:每个比特要么处于状态0,要么处于状态1,这种状态是稳定且可重复的。在经典计算中,信息存储遵循明确的物理定律,状态可以通过光学、磁学或电子学方式被精确地读取和写入。

# 经典比特的确定性状态
classical_bits = [0, 1, 0, 1, 1]  # 确定性状态
print(f"经典比特序列: {classical_bits}")
print(f"每个比特的确定值: 第1位 = {classical_bits[0]}, 第2位 = {classical_bits[1]}")

经典系统的一个重要特征是可复制性:任意经典信息都可以被完美复制而不会影响原信息的完整性。这一特性建立在经典物理学的可观测性原理之上。

量子比特的信息密度与概率性

量子比特则以复系数的形式表示信息:α|0⟩ + β|1⟩,其中|α|² + |β|² = 1。这种表示方式引入了概率性和不确定性,但同时也大大增加了信息存储的密度。

# 量子比特的概率性表示示例
import numpy as np
import matplotlib.pyplot as plt

def qubit_amplitude_analysis():
    """分析量子比特的振幅分布"""
    
    # 定义不同量子态的振幅
    states = {
        "|0⟩": [1.0 + 0j, 0.0 + 0j],
        "|1⟩": [0.0 + 0j, 1.0 + 0j],
        "|+⟩": [1/np.sqrt(2) + 0j, 1/np.sqrt(2) + 0j],
        "|-⟩": [1/np.sqrt(2) + 0j, -1/np.sqrt(2) + 0j],
        "|+i⟩": [1/np.sqrt(2) + 0j, 1j/np.sqrt(2) + 0j],
        "|-i⟩": [1/np.sqrt(2) + 0j, -1j/np.sqrt(2) + 0j]
    }
    
    # 计算测量概率
    for state_name, amplitudes in states.items():
        prob_0 = abs(amplitudes[0])**2
        prob_1 = abs(amplitudes[1])**2
        print(f"态 {state_name}: α={amplitudes[0]:.3f}, β={amplitudes[1]:.3f}")
        print(f"  测量 |0⟩ 的概率: {prob_0:.3f}, 测量 |1⟩ 的概率: {prob_1:.3f}")
        print()

qubit_amplitude_analysis()

量子系统的这种概率性描述并不意味着信息丢失,而是信息以叠加态的形式存储,使得量子系统能够同时"记住"多个状态的信息。

信息复制与不可克隆定理

经典信息的完美复制

经典信息可以被完美复制而不产生任何误差:

def classical_copy(data):
    """经典信息复制示例"""
    original_data = [1, 0, 1, 1, 0]
    copied_data = original_data.copy()  # 完美复制
    
    print(f"原始数据: {original_data}")
    print(f"复制数据: {copied_data}")
    print(f"复制是否完美: {original_data == copied_data}")
    
    # 修改复制数据不会影响原始数据
    copied_data[0] = 999
    print(f"修改后复制数据: {copied_data}")
    print(f"原始数据保持不变: {original_data}")
    
classical_copy([1, 0, 1, 1, 0])

量子不可克隆定理

量子信息的一个根本限制是不可克隆定理(No-Cloning Theorem):不存在一个量子过程能够复制任意未知量子态而不改变原始态。

# 量子不可克隆定理的数学表达
"""
定理:不存在一个酉变换 U,使得对于任意量子态 |ψ⟩,都有:
U(|ψ⟩ ⊗ |0⟩) = |ψ⟩ ⊗ |ψ⟩

证明:假设存在这样的 U,则对于两个正交态 |ψ₁⟩ 和 |ψ₂⟩:
U(|ψ₁⟩ ⊗ |0⟩) = |ψ₁⟩ ⊗ |ψ₁⟩
U(|ψ₂⟩ ⊗ |0⟩) = |ψ₂⟩ ⊗ |ψ₂⟩

取内积:
⟨ψ₁|ψ₂⟩ ⊗ ⟨0|0⟩ = (⟨ψ₁|ψ₂⟩)²

由于 ⟨ψ₁|ψ₂⟩ = 0(正交),左边为 0,但右边为 0² = 0,
这里似乎没有矛盾...

关键在于:酉变换保持内积。
左边:⟨ψ₁|ψ₂⟩ ⊗ ⟨0|0⟩ = 0 × 1 = 0
右边:⟨ψ₁|ψ₂⟩ ⊗ ⟨ψ₁|ψ₂⟩ = 0 × 0 = 0

但是对于非正交态,问题就出现了!
"""

def no_cloning_example():
    """展示非正交态的克隆困难"""
    import numpy as np
    
    # 定义两个非正交态
    psi1 = np.array([1, 0])  # |0⟩
    psi2 = np.array([1, 1]) / np.sqrt(2)  # |+⟩
    
    print("非正交态的克隆问题:")
    print(f"态 |ψ₁⟩ = |0⟩ = {psi1}")
    print(f"态 |ψ₂⟩ = |+⟩ = {psi2}")
    
    # 计算内积
    inner_prod_original = np.dot(psi1.conj(), psi2)
    print(f"原始内积 ⟨ψ₁|ψ₂⟩ = {inner_prod_original:.3f}")
    
    # 若克隆成功:|ψ₁⟩→|ψ₁⟩|ψ₁⟩, |ψ₂⟩→|ψ₂⟩|ψ₂⟩
    # 克隆态内积应为 (⟨ψ₁|ψ₂⟩)²
    inner_prod_cloned = inner_prod_original ** 2
    print(f"克隆后理论内积 (⟨ψ₁|ψ₂⟩)² = {inner_prod_cloned:.3f}")
    
    print("\n由于酉变换必须保持内积不变,而 0.707 ≠ 0.5,")
    print("因此不存在通用的量子克隆机能同时克隆这两个态。")

no_cloning_example()

这个定理对量子密码学和量子信息处理有深远影响,它保证了量子信息的不可复制性,从而为量子安全通信提供了理论基础。