🎭
为什么概率相同,量子态却不同?从相位到密度矩阵,揭开量子相干性的面纱
引言:看不见的相位,看得见的概率
在之前的文章中,我们学习了量子比特的叠加态 ∣ψ⟩=α∣0⟩+β∣1⟩|\\psi\\rangle = \\alpha|0\\rangle + \\beta|1\\rangle∣ψ⟩=α∣0⟩+β∣1⟩,其中 α\\alphaα和 β\\betaβ是复数,满足∣α∣2+∣β∣2=1|\\alpha|^2 + |\\beta|^2 = 1∣α∣2+∣β∣2=1。我们也知道测量得到 ∣0⟩|0\\rangle∣0⟩ 的概率是 ∣α∣2|\\alpha|^2∣α∣2,得到 ∣1⟩|1\\rangle∣1⟩ 的概率是 ∣β∣2|\\beta|^2∣β∣2。
但这里有一个关键问题:概率只依赖于模平方,丢失了相位的全部信息。例如,考虑两个不同的量子态:
∣ψ1⟩=12(∣0⟩+∣1⟩),∣ψ2⟩=12(∣0⟩−∣1⟩)
|\\psi_1\\rangle = \\frac{1}{\\sqrt{2}}(|0\\rangle + |1\\rangle), \\quad
|\\psi_2\\rangle = \\frac{1}{\\sqrt{2}}(|0\\rangle – |1\\rangle)
∣ψ1⟩=21(∣0⟩+∣1⟩),∣ψ2⟩=21(∣0⟩−∣1⟩)
它们在计算基 {∣0⟩,∣1⟩}\\{|0\\rangle,|1\\rangle\\}{∣0⟩,∣1⟩} 下测量的概率完全相同:各1/2。然而,它们确实是不同的量子态——∣ψ2⟩|\\psi_2\\rangle∣ψ2⟩ 带有一个相对相位 −1-1−1。这个相位在干涉实验中会显现出来,例如,在 ∣±⟩|\\pm\\rangle∣±⟩ 基下测量,它们的结果完全不同:
- 对 ∣ψ1⟩=∣+⟩|\\psi_1\\rangle = |+\\rangle∣ψ1⟩=∣+⟩ 在 {∣+⟩,∣−⟩}\\{|+\\rangle,|-\\rangle\\}{∣+⟩,∣−⟩} 基下测量,总是得到 ∣+⟩|+\\rangle∣+⟩(概率1)。
- 对 ∣ψ2⟩=∣−⟩|\\psi_2\\rangle = |-\\rangle∣ψ2⟩=∣−⟩ 在相同基下测量,总是得到 ∣−⟩|-\\rangle∣−⟩(概率1)。
这就引出了一个深刻的问题:仅凭测量概率,我们无法唯一确定一个量子态。我们需要更丰富的数学工具来描述量子态的全部信息,尤其是相位。更进一步,当系统不是处于一个确定的量子态,而是以一定概率混合多个量子态时,我们该如何描述?这就引出了纯态与混合态的概念。
本文将带你深入理解:
- 相位:量子相干性的灵魂
- 纯态:由态矢描述的“纯粹”量子态
- 混合态:经典概率混合,由密度矩阵描述
- 如何用密度矩阵统一处理纯态和混合态
- 通过实例和Python代码区分它们
一、相位:量子相干性的体现
1.1 相位的数学表示
任意单量子比特态可以写为:
∣ψ⟩=cosθ2∣0⟩+eiϕsinθ2∣1⟩
|\\psi\\rangle = \\cos\\frac{\\theta}{2} |0\\rangle + e^{i\\phi} \\sin\\frac{\\theta}{2} |1\\rangle
∣ψ⟩=cos2θ∣0⟩+eiϕsin2θ∣1⟩
其中 θ∈[0,π]\\theta \\in [0,\\pi]θ∈[0,π],ϕ∈[0,2π)\\phi \\in [0,2\\pi)ϕ∈[0,2π)。这里的 ϕ\\phiϕ 就是相对相位。它决定了 ∣0⟩|0\\rangle∣0⟩ 和 ∣1⟩|1\\rangle∣1⟩ 之间的相位关系。
1.2 相位的作用
相位在量子干涉中起着决定性作用。考虑两个态:
∣+⟩=∣0⟩+∣1⟩2,∣−⟩=∣0⟩−∣1⟩2
|+\\rangle = \\frac{|0\\rangle + |1\\rangle}{\\sqrt{2}}, \\quad |-\\rangle = \\frac{|0\\rangle – |1\\rangle}{\\sqrt{2}}
∣+⟩=2∣0⟩+∣1⟩,∣−⟩=2∣0⟩−∣1⟩
它们的区别仅在于相对相位:前者 ϕ=0\\phi=0ϕ=0,后者 ϕ=π\\phi=\\piϕ=π。在计算基下测量,它们表现完全相同(各50%概率)。但在 XXX 基(即 {∣+⟩,∣−⟩}\\{|+\\rangle,|-\\rangle\\}{∣+⟩,∣−⟩})下测量,∣+⟩|+\\rangle∣+⟩ 总是给出 ∣+⟩|+\\rangle∣+⟩,∣−⟩|-\\rangle∣−⟩ 总是给出 ∣−⟩|-\\rangle∣−⟩。因此,相位可以通过在不同基下的测量来揭示。
1.3 为什么测量概率丢失相位?
测量概率 p(i)=∣⟨i∣ψ⟩∣2p(i) = |\\langle i|\\psi\\rangle|^2p(i)=∣⟨i∣ψ⟩∣2 是内积模的平方。对于 ∣ψ⟩=α∣0⟩+β∣1⟩|\\psi\\rangle = \\alpha|0\\rangle + \\beta|1\\rangle∣ψ⟩=α∣0⟩+β∣1⟩,∣⟨0∣ψ⟩∣2=∣α∣2|\\langle 0|\\psi\\rangle|^2 = |\\alpha|^2∣⟨0∣ψ⟩∣2=∣α∣2 只依赖于模长,不依赖于 α\\alphaα的相位。同样,∣⟨1∣ψ⟩∣2=∣β∣2|\\langle 1|\\psi\\rangle|^2 = |\\beta|^2∣⟨1∣ψ⟩∣2=∣β∣2 也只依赖于模长。因此,单次基测量无法获取相位信息。
要获取相位,需要进行干涉实验:将待测态与一个参考态叠加,通过测量干涉图样提取相位。
二、纯态:由态矢描述的量子态
纯态(pure state)是指可以用一个态矢 ∣ψ⟩|\\psi\\rangle∣ψ⟩ 完全描述的量子态。它满足:
- 可以用希尔伯特空间中的向量表示。
- 具有确定的相位关系,即量子相干性。
- 测量概率由波恩规则给出,但相位信息隐含在态矢中。
例如,∣0⟩|0\\rangle∣0⟩、∣1⟩|1\\rangle∣1⟩、∣+⟩|+\\rangle∣+⟩、∣−⟩|-\\rangle∣−⟩ 都是纯态。纯态也可以写成密度算符的形式:
ρ=∣ψ⟩⟨ψ∣
\\rho = |\\psi\\rangle\\langle \\psi|
ρ=∣ψ⟩⟨ψ∣
这是一个秩为1的投影算符,满足 ρ2=ρ\\rho^2 = \\rhoρ2=ρ,且 Tr(ρ2)=1\\operatorname{Tr}(\\rho^2) = 1Tr(ρ2)=1。
三、混合态:经典概率混合
3.1 从比喻说起
让我们回到用户提供的比喻:
假设左手抓着一个袋子,这个袋子里面有无数的量子态,它们全都是 ∣ψ⟩=∣0⟩+∣1⟩2|\\psi\\rangle = \\frac{|0\\rangle + |1\\rangle}{\\sqrt{2}}∣ψ⟩=2∣0⟩+∣1⟩ 这种叠加态。另外,有一个机器可以在 ZZZ 方向(计算基)上测量。每次拿出一个态,对它进行测量,不管它是 ∣0⟩|0\\rangle∣0⟩ 还是 ∣1⟩|1\\rangle∣1⟩,都扔到右手边的另一个袋子里面。如此反复,右边袋子里面的态越来越多了。由于测量结果对于这两种情况是等概率的,所以袋子里面约有一半的态是 ∣0⟩|0\\rangle∣0⟩,另一半是 ∣1⟩|1\\rangle∣1⟩。
现在,从右边的袋子里取出一个量子态。我们能说它和左边袋子里的态一样都是 ∣+⟩|+\\rangle∣+⟩ 吗?
答案是不能。左边袋子里的每个态都是 ∣+⟩|+\\rangle∣+⟩——一个纯态,具有确定的相位关系(ϕ=0\\phi=0ϕ=0)。右边袋子里的态,实际上是一半 ∣0⟩|0\\rangle∣0⟩ 和一半 ∣1⟩|1\\rangle∣1⟩ 的经典混合,就像一袋红球和白球一样。这种混合不包含任何相位信息,我们无法知道这些 ∣0⟩|0\\rangle∣0⟩ 和 ∣1⟩|1\\rangle∣1⟩ 原本是从 ∣+⟩|+\\rangle∣+⟩ 测量得来的。它只能表示为:
{以概率 1/2 处于 ∣0⟩以概率 1/2 处于 ∣1⟩
\\left\\{ \\begin{array}{l} \\text{以概率 } 1/2 \\text{ 处于 } |0\\rangle \\\\ \\text{以概率 } 1/2 \\text{ 处于 } |1\\rangle \\end{array} \\right.
{以概率 1/2 处于 ∣0⟩以概率 1/2 处于 ∣1⟩
这种描述就是混合态(mixed state)。
3.2 混合态的数学表示:密度矩阵
混合态不能用一个态矢表示,但可以用密度算符(density operator)统一描述。对于一个以概率 pip_ipi 处于纯态 ∣ψi⟩|\\psi_i\\rangle∣ψi⟩ 的系综,密度算符定义为:
ρ=∑ipi∣ψi⟩⟨ψi∣
\\rho = \\sum_i p_i |\\psi_i\\rangle\\langle \\psi_i|
ρ=i∑pi∣ψi⟩⟨ψi∣
其中 pi>0p_i > 0pi>0,∑ipi=1\\sum_i p_i = 1∑ipi=1。
对于上述例子:
ρ=12∣0⟩⟨0∣+12∣1⟩⟨1∣=12[1000]+12[0001]=[120012]
\\rho = \\frac{1}{2}|0\\rangle\\langle 0| + \\frac{1}{2}|1\\rangle\\langle 1| = \\frac{1}{2}\\begin{bmatrix}1&0\\\\0&0\\end{bmatrix} + \\frac{1}{2}\\begin{bmatrix}0&0\\\\0&1\\end{bmatrix} = \\begin{bmatrix}\\frac{1}{2}&0\\\\0&\\frac{1}{2}\\end{bmatrix}
ρ=21∣0⟩⟨0∣+21∣1⟩⟨1∣=21[1000]+21[0001]=[210021]
这就是完全混合态,也称为最大混合态。
3.3 密度矩阵的性质
- 厄米性:ρ†=ρ\\rho^\\dagger = \\rhoρ†=ρ
- 迹为1:Tr(ρ)=1\\operatorname{Tr}(\\rho) = 1Tr(ρ)=1
- 半正定性:对任意态 ∣ϕ⟩|\\phi\\rangle∣ϕ⟩,⟨ϕ∣ρ∣ϕ⟩≥0\\langle\\phi|\\rho|\\phi\\rangle \\ge 0⟨ϕ∣ρ∣ϕ⟩≥0
- 对于纯态:ρ2=ρ\\rho^2 = \\rhoρ2=ρ,且 Tr(ρ2)=1\\operatorname{Tr}(\\rho^2) = 1Tr(ρ2)=1
- 对于混合态:Tr(ρ2)<1\\operatorname{Tr}(\\rho^2) < 1Tr(ρ2)<1(等于1当且仅当纯态)
Tr(ρ2)\\operatorname{Tr}(\\rho^2)Tr(ρ2) 称为纯度(purity),是衡量一个态“混合程度”的指标。
四、纯态与混合态的对比
| 数学描述 | 态矢 ∣ψ⟩|\\psi\\rangle∣ψ⟩ 或密度矩阵 ρ=∣ψ⟩⟨ψ∣\\rho = |\\psi\\rangle\\langle\\psi|ρ=∣ψ⟩⟨ψ∣ | 密度矩阵 ρ=∑ipi∣ψi⟩⟨ψi∣\\rho = \\sum_i p_i |\\psi_i\\rangle\\langle\\psi_i|ρ=∑ipi∣ψi⟩⟨ψi∣ |
| 相位信息 | 有确定的相对相位 | 相位信息丢失(除非相干混合) |
| 纯度 | Tr(ρ2)=1\\operatorname{Tr}(\\rho^2) = 1Tr(ρ2)=1 | Tr(ρ2)<1\\operatorname{Tr}(\\rho^2) < 1Tr(ρ2)<1 |
| 例子 | ∣+⟩|+\\rangle∣+⟩ | 12(∣0⟩⟨0∣+∣1⟩⟨1∣)\\frac{1}{2}(|0\\rangle\\langle0| + |1\\rangle\\langle1|)21(∣0⟩⟨0∣+∣1⟩⟨1∣) |
| 测量表现 | 在某些基下可呈现干涉 | 无干涉,经典概率 |
重要区别:量子相干性
纯态具有量子相干性,这意味着它们可以产生干涉现象。混合态则没有这种相干性,因为不同分量之间的相位关系是随机的或丢失的。
例如,考虑两个态:
- 纯态 ∣+⟩=∣0⟩+∣1⟩2|+\\rangle = \\frac{|0\\rangle+|1\\rangle}{\\sqrt{2}}∣+⟩=2∣0⟩+∣1⟩
- 混合态 ρ=12(∣0⟩⟨0∣+∣1⟩⟨1∣)\\rho = \\frac{1}{2}(|0\\rangle\\langle0| + |1\\rangle\\langle1|)ρ=21(∣0⟩⟨0∣+∣1⟩⟨1∣)
在计算基下测量,它们都给出50%概率0和50%概率1。但在 XXX 基下测量:
- ∣+⟩|+\\rangle∣+⟩ 总是给出 ∣+⟩|+\\rangle∣+⟩(概率1)
- 混合态 ρ\\rhoρ 在 XXX 基下测量,得到 ∣+⟩|+\\rangle∣+⟩ 和 ∣−⟩|-\\rangle∣−⟩ 的概率各1/2(因为 ρ=12I\\rho = \\frac{1}{2}Iρ=21I 在任何基下都是均匀分布)
因此,通过在不同基下的测量,我们可以区分纯态和混合态。
五、密度矩阵的物理意义
密度矩阵不仅可以描述混合态,也可以描述复合系统的子系统。例如,一个两比特纠缠态的部分迹(partial trace)得到的就是混合态。这在量子信息中非常重要。
5.1 部分迹与约化密度矩阵
对于两比特纠缠态 ∣Φ+⟩=∣00⟩+∣11⟩2|\\Phi^+\\rangle = \\frac{|00\\rangle + |11\\rangle}{\\sqrt{2}}∣Φ+⟩=2∣00⟩+∣11⟩,如果我们只关心第一个比特,它的状态由对第二个比特求部分迹得到:
ρA=TrB(∣Φ+⟩⟨Φ+∣)=12(∣0⟩⟨0∣+∣1⟩⟨1∣)
\\rho_A = \\operatorname{Tr}_B(|\\Phi^+\\rangle\\langle\\Phi^+|) = \\frac{1}{2}(|0\\rangle\\langle0| + |1\\rangle\\langle1|)
ρA=TrB(∣Φ+⟩⟨Φ+∣)=21(∣0⟩⟨0∣+∣1⟩⟨1∣)
这正是完全混合态!这说明,尽管整体系统处于纯态,但每个子系统却处于混合态——这是纠缠的重要特征。
六、动手实践:用Python区分纯态与混合态
下面我们用NumPy构造纯态和混合态,计算它们的纯度,并模拟在不同基下的测量。
import numpy as np
# 基态
ket0 = np.array([[1], [0]])
ket1 = np.array([[0], [1]])
# 定义纯态 |+>
plus = (ket0 + ket1) / np.sqrt(2)
rho_pure = plus @ plus.conj().T # 密度矩阵
# 定义混合态 (最大混合态)
rho_mixed = 0.5 * (ket0 @ ket0.conj().T + ket1 @ ket1.conj().T)
# 计算纯度
purity_pure = np.trace(rho_pure @ rho_pure).real
purity_mixed = np.trace(rho_mixed @ rho_mixed).real
print("纯态 ρ = \\n", rho_pure)
print("纯度 Tr(ρ^2) =", purity_pure)
print("\\n混合态 ρ = \\n", rho_mixed)
print("纯度 Tr(ρ^2) =", purity_mixed)
# 定义 X 基的投影算符
ket_plus = plus
ket_minus = (ket0 – ket1) / np.sqrt(2)
P_plus = ket_plus @ ket_plus.conj().T
P_minus = ket_minus @ ket_minus.conj().T
# 在 X 基下测量纯态
prob_plus_pure = np.trace(P_plus @ rho_pure).real
prob_minus_pure = np.trace(P_minus @ rho_pure).real
print("\\n纯态在 X 基下测量:")
print("p(+) =", prob_plus_pure, "p(-) =", prob_minus_pure)
# 在 X 基下测量混合态
prob_plus_mixed = np.trace(P_plus @ rho_mixed).real
prob_minus_mixed = np.trace(P_minus @ rho_mixed).real
print("\\n混合态在 X 基下测量:")
print("p(+) =", prob_plus_mixed, "p(-) =", prob_minus_mixed)
输出:
纯态 ρ =
[[0.5 0.5]
[0.5 0.5]]
纯度 Tr(ρ^2) = 1.0
混合态 ρ =
[[0.5 0. ]
[0. 0.5]]
纯度 Tr(ρ^2) = 0.5
纯态在 X 基下测量:
p(+) = 1.0 p(-) = 0.0
混合态在 X 基下测量:
p(+) = 0.5 p(-) = 0.5
完美验证了我们的讨论:纯态在 X 基下测量结果确定,混合态则完全随机。
七、总结
| 相位 | 量子态中不同分量之间的相对角度 | eiϕe^{i\\phi}eiϕ | 影响干涉,但不出现在概率中 |
| 纯态 | 由单一态矢描述的量子态 | ∣ψ⟩|\\psi\\rangle∣ψ⟩ 或 ρ=∣ψ⟩⟨ψ∣\\rho = |\\psi\\rangle\\langle\\psi|ρ=∣ψ⟩⟨ψ∣ | Tr(ρ2)=1\\operatorname{Tr}(\\rho^2)=1Tr(ρ2)=1,有相干性 |
| 混合态 | 经典概率混合的量子态 | ρ=∑ipi∣ψi⟩⟨ψi∣\\rho = \\sum_i p_i |\\psi_i\\rangle\\langle\\psi_i|ρ=∑ipi∣ψi⟩⟨ψi∣ | Tr(ρ2)<1\\operatorname{Tr}(\\rho^2)<1Tr(ρ2)<1,无相干性 |
纯态与混合态的根本区别在于量子相干性。纯态保留了相位信息,可以产生干涉;混合态则相当于经典统计混合,丢失了相位。密度矩阵是统一描述两者的强大工具,也是处理子系统、纠缠和开放量子系统的必备语言。
理解这些概念,对于深入学习量子信息、量子热力学和量子退相干至关重要。
思考题
欢迎在评论区分享你的思考和答案!
参考:[1] Nielsen & Chuang, Quantum Computation and Quantum Information [2] 本系列前文

🔮 量子门与量子电路:用矩阵操控量子态,实现最简单的量子算法
从线性代数到量子计算——一次函数查询如何区分全局性质?
引言:操控量子态的艺术
在经典计算机中,我们通过逻辑门(与门、或门、非门)处理比特,这些门对应着布尔函数。在量子计算机中,我们用量子门操控量子比特,而量子门的数学本质是酉矩阵——一种保持向量内积的线性变换。通过将一系列量子门组合成量子电路,我们可以实现复杂的量子算法,利用叠加和干涉解决经典计算机难以处理的问题。
本文将带你从线性代数视角重新认识量子门,并实现量子计算史上第一个展示量子优势的算法——Deutsch算法。你将看到:
- 量子态如何表示为向量
- 量子门如何用矩阵作用改变量子态
- 如何用H门、X门、CNOT门构建电路
- Deutsch算法的完整数学推导与Python代码实现
- 从Deutsch到Deutsch-Jozsa的推广
一、量子态的数学表示:态矢
在量子力学中,一个量子系统的状态由希尔伯特空间中的态矢(state vector)描述。对于量子比特,两个基态通常记为:
∣0⟩=[10],∣1⟩=[01]
|0\\rangle = \\begin{bmatrix}1 \\\\ 0\\end{bmatrix},\\quad |1\\rangle = \\begin{bmatrix}0 \\\\ 1\\end{bmatrix}
∣0⟩=[10],∣1⟩=[01]
任意单量子比特态可以表示为这两个基的线性组合:
∣ψ⟩=α∣0⟩+β∣1⟩=[αβ]
|\\psi\\rangle = \\alpha|0\\rangle + \\beta|1\\rangle = \\begin{bmatrix}\\alpha \\\\ \\beta\\end{bmatrix}
∣ψ⟩=α∣0⟩+β∣1⟩=[αβ]
其中 α,β\\alpha, \\betaα,β 是复数,满足归一化条件 ∣α∣2+∣β∣2=1|\\alpha|^2 + |\\beta|^2 = 1∣α∣2+∣β∣2=1。∣α∣2|\\alpha|^2∣α∣2 和 ∣β∣2|\\beta|^2∣β∣2 分别是测量得到 ∣0⟩|0\\rangle∣0⟩ 和 ∣1⟩|1\\rangle∣1⟩ 的概率。
二、量子门:酉矩阵的作用
2.1 酉矩阵的定义
量子门对应酉矩阵 UUU,满足 U†U=UU†=IU^\\dagger U = U U^\\dagger = IU†U=UU†=I,其中 U†U^\\daggerU† 是 UUU 的共轭转置。酉矩阵的作用是将一个归一化的量子态映射到另一个归一化的量子态,保持概率总和为1。量子门是可逆的(因为酉矩阵可逆),这与许多经典逻辑门(如AND)的不可逆形成鲜明对比。
2.2 常用单量子比特门
| H (Hadamard) | 12[111−1]\\frac{1}{\\sqrt{2}}\\begin{bmatrix}1&1\\\\1&-1\\end{bmatrix}21[111−1] | 创造叠加态:H∣0⟩=∣+⟩H|0\\rangle = |+\\rangleH∣0⟩=∣+⟩,H∣1⟩=∣−⟩H|1\\rangle = |-\\rangleH∣1⟩=∣−⟩ |
| X (泡利-X) | [0110]\\begin{bmatrix}0&1\\\\1&0\\end{bmatrix}[0110] | 量子非门:X∣0⟩=∣1⟩X|0\\rangle = |1\\rangleX∣0⟩=∣1⟩,X∣1⟩=∣0⟩X|1\\rangle = |0\\rangleX∣1⟩=∣0⟩ |
| Y (泡利-Y) | [0−ii0]\\begin{bmatrix}0&-i\\\\i&0\\end{bmatrix}[0i−i0] | 同时进行比特和相位翻转 |
| Z (泡利-Z) | [100−1]\\begin{bmatrix}1&0\\\\0&-1\\end{bmatrix}[100−1] | 相位翻转:Z∣0⟩=∣0⟩Z|0\\rangle = |0\\rangleZ∣0⟩=∣0⟩,Z∣1⟩=−∣1⟩Z|1\\rangle = -|1\\rangleZ∣1⟩=−∣1⟩ |
| S (相位门) | [100i]\\begin{bmatrix}1&0\\\\0&i\\end{bmatrix}[100i] | 引入 π/2\\pi/2π/2 相位 |
| T ((\\pi/8)门) | [100eiπ/4]\\begin{bmatrix}1&0\\\\0&e^{i\\pi/4}\\end{bmatrix}[100eiπ/4] | 引入 π/4\\pi/4π/4 相位 |
这些单比特门是构成量子电路的基本单元。
2.3 两量子比特门:CNOT
两量子比特门中最重要的当属CNOT门(受控非门)。它的矩阵表示为:
CNOT=[1000010000010010]
\\text{CNOT} = \\begin{bmatrix}
1 & 0 & 0 & 0 \\\\
0 & 1 & 0 & 0 \\\\
0 & 0 & 0 & 1 \\\\
0 & 0 & 1 & 0
\\end{bmatrix}
CNOT=1000010000010010
作用:如果控制比特(第一个)为 ∣1⟩|1\\rangle∣1⟩,则翻转目标比特(第二个);否则保持不变。用计算基表示为:
CNOT∣00⟩=∣00⟩, CNOT∣01⟩=∣01⟩, CNOT∣10⟩=∣11⟩, CNOT∣11⟩=∣10⟩
\\text{CNOT}|00\\rangle = |00\\rangle,\\; \\text{CNOT}|01\\rangle = |01\\rangle,\\; \\text{CNOT}|10\\rangle = |11\\rangle,\\; \\text{CNOT}|11\\rangle = |10\\rangle
CNOT∣00⟩=∣00⟩,CNOT∣01⟩=∣01⟩,CNOT∣10⟩=∣11⟩,CNOT∣11⟩=∣10⟩
CNOT门可以产生纠缠,是量子计算中不可或缺的组件。
三、量子电路的构建
3.1 门的并行:张量积
当多个门同时作用在不同量子比特上时,整体矩阵由它们的张量积给出。例如,对第一个比特应用H门,同时对第二个比特应用X门,整体矩阵为 H⊗XH \\otimes XH⊗X。张量积的规则:(A⊗B)(∣ψ⟩⊗∣ϕ⟩)=(A∣ψ⟩)⊗(B∣ϕ⟩)(A \\otimes B)(|\\psi\\rangle \\otimes |\\phi\\rangle) = (A|\\psi\\rangle) \\otimes (B|\\phi\\rangle)(A⊗B)(∣ψ⟩⊗∣ϕ⟩)=(A∣ψ⟩)⊗(B∣ϕ⟩)。
3.2 门的顺序:矩阵乘法
当门依次作用时,整体演化由矩阵乘积描述,但顺序要反过来:先作用的门在乘积的右边。例如,电路先应用 U1U_1U1,再应用 U2U_2U2,最后应用 U3U_3U3,则整体矩阵为 U3U2U1U_3 U_2 U_1U3U2U1。
3.3 测量
测量是量子电路的最后一步,它将量子信息转化为经典信息。测量结果是一个概率分布,由波恩规则给出:对态 ∣ψ⟩|\\psi\\rangle∣ψ⟩ 测量得到 ∣i⟩|i\\rangle∣i⟩ 的概率为 ∣⟨i∣ψ⟩∣2|\\langle i|\\psi\\rangle|^2∣⟨i∣ψ⟩∣2。测量后,量子态坍缩到 ∣i⟩|i\\rangle∣i⟩。
四、最简单的量子算法:Deutsch算法
4.1 问题描述
我们有一个未知的黑箱函数 f:{0,1}→{0,1}f: \\{0,1\\} \\to \\{0,1\\}f:{0,1}→{0,1},它要么是常数函数(f(0)=f(1)f(0)=f(1)f(0)=f(1)),要么是平衡函数(f(0)≠f(1)f(0)\\neq f(1)f(0)=f(1))。我们需要用最少的查询次数判断它是常数还是平衡。
经典解法:需要分别查询 f(0)f(0)f(0) 和 f(1)f(1)f(1),然后比较——需要两次查询。
量子解法:Deutsch算法仅需一次查询!它展示了量子并行性的威力。
4.2 电路设计
Deutsch算法的量子电路如下:
q0: |0> ── H ── U_f ── H ── M
q1: |1> ── H ───────────
其中 UfU_fUf 是量子预言机,实现:
Uf∣x⟩∣y⟩=∣x⟩∣y⊕f(x)⟩
U_f |x\\rangle|y\\rangle = |x\\rangle |y \\oplus f(x)\\rangle
Uf∣x⟩∣y⟩=∣x⟩∣y⊕f(x)⟩
⊕\\oplus⊕ 是模2加法(异或)。
4.3 数学推导
我们一步步推导量子态的变化。
初始化:
∣ψ0⟩=∣0⟩⊗∣1⟩=∣01⟩
|\\psi_0\\rangle = |0\\rangle \\otimes |1\\rangle = |01\\rangle
∣ψ0⟩=∣0⟩⊗∣1⟩=∣01⟩
第一步:对两个比特应用H门:
∣ψ1⟩=(H⊗H)∣01⟩=H∣0⟩⊗H∣1⟩
|\\psi_1\\rangle = (H\\otimes H)|01\\rangle = H|0\\rangle \\otimes H|1\\rangle
∣ψ1⟩=(H⊗H)∣01⟩=H∣0⟩⊗H∣1⟩
因为 H∣0⟩=∣0⟩+∣1⟩2H|0\\rangle = \\frac{|0\\rangle+|1\\rangle}{\\sqrt{2}}H∣0⟩=2∣0⟩+∣1⟩,H∣1⟩=∣0⟩−∣1⟩2H|1\\rangle = \\frac{|0\\rangle-|1\\rangle}{\\sqrt{2}}H∣1⟩=2∣0⟩−∣1⟩,所以:
∣ψ1⟩=12(∣0⟩+∣1⟩)⊗12(∣0⟩−∣1⟩)=12[∣0⟩(∣0⟩−∣1⟩)+∣1⟩(∣0⟩−∣1⟩)]
|\\psi_1\\rangle = \\frac{1}{\\sqrt{2}}(|0\\rangle+|1\\rangle) \\otimes \\frac{1}{\\sqrt{2}}(|0\\rangle-|1\\rangle) = \\frac{1}{2}\\left[ |0\\rangle(|0\\rangle-|1\\rangle) + |1\\rangle(|0\\rangle-|1\\rangle) \\right]
∣ψ1⟩=21(∣0⟩+∣1⟩)⊗21(∣0⟩−∣1⟩)=21[∣0⟩(∣0⟩−∣1⟩)+∣1⟩(∣0⟩−∣1⟩)]
第二步:应用预言机 UfU_fUf:
预言机的作用是将 ∣x⟩∣y⟩|x\\rangle|y\\rangle∣x⟩∣y⟩ 变为 ∣x⟩∣y⊕f(x)⟩|x\\rangle|y\\oplus f(x)\\rangle∣x⟩∣y⊕f(x)⟩。注意当 yyy 处于 ∣0⟩−∣1⟩|0\\rangle-|1\\rangle∣0⟩−∣1⟩ 时,这个变换会引入一个相位:
Uf∣x⟩(∣0⟩−∣1⟩)=∣x⟩(∣f(x)⟩−∣1⊕f(x)⟩)=(−1)f(x)∣x⟩(∣0⟩−∣1⟩)
U_f |x\\rangle (|0\\rangle-|1\\rangle) = |x\\rangle (|f(x)\\rangle – |1\\oplus f(x)\\rangle) = (-1)^{f(x)} |x\\rangle (|0\\rangle-|1\\rangle)
Uf∣x⟩(∣0⟩−∣1⟩)=∣x⟩(∣f(x)⟩−∣1⊕f(x)⟩)=(−1)f(x)∣x⟩(∣0⟩−∣1⟩)
因为若 f(x)=0f(x)=0f(x)=0,则 ∣0⟩−∣1⟩|0\\rangle-|1\\rangle∣0⟩−∣1⟩ 不变;若 f(x)=1f(x)=1f(x)=1,则 ∣1⟩−∣0⟩=−(∣0⟩−∣1⟩)|1\\rangle-|0\\rangle = -(|0\\rangle-|1\\rangle)∣1⟩−∣0⟩=−(∣0⟩−∣1⟩)。
因此,应用 UfU_fUf 后:
∣ψ2⟩=12[(−1)f(0)∣0⟩(∣0⟩−∣1⟩)+(−1)f(1)∣1⟩(∣0⟩−∣1⟩)]
|\\psi_2\\rangle = \\frac{1}{2}\\left[ (-1)^{f(0)}|0\\rangle(|0\\rangle-|1\\rangle) + (-1)^{f(1)}|1\\rangle(|0\\rangle-|1\\rangle) \\right]
∣ψ2⟩=21[(−1)f(0)∣0⟩(∣0⟩−∣1⟩)+(−1)f(1)∣1⟩(∣0⟩−∣1⟩)]
提取公因子 ∣0⟩−∣1⟩2\\frac{|0\\rangle-|1\\rangle}{\\sqrt{2}}2∣0⟩−∣1⟩,并将系数归一化:
∣ψ2⟩=[(−1)f(0)∣0⟩+(−1)f(1)∣1⟩2]⊗∣0⟩−∣1⟩2
|\\psi_2\\rangle = \\left[ \\frac{(-1)^{f(0)}|0\\rangle + (-1)^{f(1)}|1\\rangle}{\\sqrt{2}} \\right] \\otimes \\frac{|0\\rangle-|1\\rangle}{\\sqrt{2}}
∣ψ2⟩=[2(−1)f(0)∣0⟩+(−1)f(1)∣1⟩]⊗2∣0⟩−∣1⟩
第三步:对第一个比特再次应用H门:
H门作用在第一个比特的态上:
H((−1)f(0)∣0⟩+(−1)f(1)∣1⟩2)
H\\left( \\frac{(-1)^{f(0)}|0\\rangle + (-1)^{f(1)}|1\\rangle}{\\sqrt{2}} \\right)
H(2(−1)f(0)∣0⟩+(−1)f(1)∣1⟩)
- 若 f(0)=f(1)f(0)=f(1)f(0)=f(1)(常数函数),则两个系数符号相同,设为 sss,那么态为 s∣0⟩+∣1⟩2s\\frac{|0\\rangle+|1\\rangle}{\\sqrt{2}}s2∣0⟩+∣1⟩,经过H门后:
H(s∣0⟩+∣1⟩2)=s∣0⟩
H\\left(s\\frac{|0\\rangle+|1\\rangle}{\\sqrt{2}}\\right) = s|0\\rangle
H(s2∣0⟩+∣1⟩)=s∣0⟩ - 若 f(0)≠f(1)f(0)\\neq f(1)f(0)=f(1)(平衡函数),则两个系数符号相反,设为 s∣0⟩−s∣1⟩s|0\\rangle – s|1\\rangles∣0⟩−s∣1⟩(其中 s=±1s = \\pm 1s=±1),那么态为 s∣0⟩−∣1⟩2s\\frac{|0\\rangle-|1\\rangle}{\\sqrt{2}}s2∣0⟩−∣1⟩,经过H门后:
H(s∣0⟩−∣1⟩2)=s∣1⟩
H\\left(s\\frac{|0\\rangle-|1\\rangle}{\\sqrt{2}}\\right) = s|1\\rangle
H(s2∣0⟩−∣1⟩)=s∣1⟩
因此,第一个比特的最终状态为:
- 常数函数:∣0⟩|0\\rangle∣0⟩
- 平衡函数:∣1⟩|1\\rangle∣1⟩
第四步:测量第一个比特:
测量结果直接告诉我们函数类型:若测得0,则为常数;若测得1,则为平衡。
4.4 关键洞察
- 预言机在一次调用中同时处理了 x=0x=0x=0 和 x=1x=1x=1 的信息,并将结果编码在相位中。
- 最后的H门和测量将相位信息转化为计算基下的确定性结果。
- 整个过程只用了一次函数查询,实现了经典算法需要两次查询才能完成的任务。
五、Python实现与模拟
我们使用NumPy模拟Deutsch算法的整个过程,验证四种可能的预言机。
import numpy as np
# 基态
ket0 = np.array([[1], [0]])
ket1 = np.array([[0], [1]])
# 门
H = 1/np.sqrt(2) * np.array([[1, 1], [1, –1]])
X = np.array([[0, 1], [1, 0]])
I = np.eye(2)
# CNOT矩阵 (4×4)
CNOT = np.array([
[1,0,0,0],
[0,1,0,0],
[0,0,0,1],
[0,0,1,0]
])
def deutsch_algorithm(oracle_type):
"""
模拟Deutsch算法
oracle_type: 'constant_0', 'constant_1', 'balanced_x', 'balanced_xnot'
"""
# 初始态 |01>
psi = np.kron(ket0, ket1)
# 第一步:H⊗H
H2 = np.kron(H, H)
psi = H2 @ psi
# 第二步:预言机 U_f
if oracle_type == 'constant_0':
# f(0)=0, f(1)=0: U_f = I⊗I
U_f = np.eye(4)
elif oracle_type == 'constant_1':
# f(0)=1, f(1)=1: U_f = I⊗X
U_f = np.kron(I, X)
elif oracle_type == 'balanced_x':
# f(0)=0, f(1)=1: 即 f(x)=x,实现为CNOT
U_f = CNOT
elif oracle_type == 'balanced_xnot':
# f(0)=1, f(1)=0: f(x)=x⊕1,先X再CNOT
X_on_second = np.kron(I, X)
U_f = CNOT @ X_on_second
else:
raise ValueError("Unknown oracle type")
psi = U_f @ psi
# 第三步:对第一个比特应用H门
H_on_first = np.kron(H, I)
psi = H_on_first @ psi
# 第四步:测量第一个比特
prob_0 = np.abs(psi[0,0])**2 + np.abs(psi[1,0])**2 # |00> 和 |01>
prob_1 = np.abs(psi[2,0])**2 + np.abs(psi[3,0])**2 # |10> 和 |11>
result = 0 if prob_0 > 0.5 else 1
return result
# 测试
print("常数函数 f(0)=f(1)=0 结果:", deutsch_algorithm('constant_0'))
print("常数函数 f(0)=f(1)=1 结果:", deutsch_algorithm('constant_1'))
print("平衡函数 f(x)=x 结果:", deutsch_algorithm('balanced_x'))
print("平衡函数 f(x)=x⊕1 结果:", deutsch_algorithm('balanced_xnot'))
运行输出:
常数函数 f(0)=f(1)=0 结果: 0
常数函数 f(0)=f(1)=1 结果: 0
平衡函数 f(x)=x 结果: 1
平衡函数 f(x)=x⊕1 结果: 1
这正是Deutsch算法的预期结果:常数函数测得0,平衡函数测得1。
六、从Deutsch到Deutsch-Jozsa
Deutsch算法处理的是单比特函数。它的推广——Deutsch-Jozsa算法——可以处理 nnn比特的函数,判断它是常数函数还是平衡函数(对于平衡函数,输出0和1的个数相等)。经典算法在最坏情况下需要 2n−1+12^{n-1}+12n−1+1 次查询,而Deutsch-Jozsa算法仍然只需要一次查询!这是第一个展示指数级加速的量子算法。
Deutsch-Jozsa的电路结构与Deutsch类似,只是将单比特H门替换为 nnn 比特的H门,预言机作用于 n+1n+1n+1 个比特上。其核心思想同样是相位编码和干涉。
七、总结
| 量子态 | 复向量 ∣ψ⟩|\\psi\\rangle∣ψ⟩ | 描述系统状态 |
| 量子门 | 酉矩阵 UUU | 操控量子态 |
| 量子电路 | 门的序列(矩阵乘积) | 实现复杂变换 |
| Deutsch算法 | HHH + 预言机 + HHH | 一次查询区分常数/平衡函数 |
| 量子优势 | 利用叠加和干涉 | 指数/二次加速 |
量子门与量子电路是量子计算的“硬件”描述语言。通过矩阵乘法,我们可以精确预言量子态的演化,并设计出超越经典算法的解决方案。Deutsch算法虽小,却展示了量子计算的精髓——并行性与干涉的结合。掌握这些基础,你就能向更复杂的Grover搜索和Shor因式分解迈进。
思考题
欢迎在评论区分享你的思考和实验结果!
参考:[1] Nielsen & Chuang, Quantum Computation and Quantum Information [2] 本系列前文


