1. 量子态数据建模:从狄拉克符号到可计算数组

任务对象与符号约定

本例给定一个两能级量子态(单量子比特)的狄拉克符号描述:

|ψ⟩ = (1/2)|0⟩ + (√3/2)|1⟩

目标是把它映射为可计算的数值向量,并验证归一化条件。建模前先固定三条约定,后续正文、代码与图示保持一致:

  • 基矢顺序:计算基按 |0⟩、|1⟩ 排列,即索引 0 对应 |0⟩,索引 1 对应 |1⟩。
  • 系数含义:|ψ⟩ = α|0⟩ + β|1⟩ 中 α、β 为复数振幅,向量表示为 [α, β]。
  • 归一化判据:⟨ψ|ψ⟩ = |α|² + |β|² = 1,允许的数值误差取 1e-9。

本例的振幅均为实数,因此向量可直接写成 [0.5, 0.8660254037844386];若振幅含虚部,则需用复数数组表示,验证时取模平方。

符号到数组的映射关系

狄拉克符号与数组之间不是简单“去掉括号”,而是三层对应:基矢对应数组下标,振幅对应数组元素,内积对应向量模平方和。下图给出这一映射链以及归一化验证的判读路径。

符号层(狄拉克) |ψ⟩ = α|0⟩ + β|1⟩ α = 1/2 β = √3/2 基矢:|0⟩、|1⟩ 映射规则 |0⟩ → 下标 0 |1⟩ → 下标 1 α、β → 数组元素 顺序固定,不可交换 数组层(可计算) psi = [0.5, 0.8660254] psi[0] = 0.5 psi[1] = 0.8660254 dtype = float64 归一化验证:⟨ψ|ψ⟩ = |α|² + |β|² |α|² = 0.5² = 0.25 |β|² = (√3/2)² = 0.75 求和 0.25 + 0.75 = 1.0 |1.0 − 1| ≤ 1e-9 ✓ 判读:残差 ≤ 容差 → 归一化成立,数组可直接用于后续概率计算;残差超限 → 检查振幅录入或基矢顺序

可运行的转换与验证实现

下面用 Python 完成三件事:把符号描述写成振幅数组、计算归一化残差、输出可直接复用的结果。代码不依赖第三方库,仅用标准库 math,便于在任何环境复现。

import math

# 1) 符号层:按 |0⟩、|1⟩ 顺序给出复数振幅 (实部, 虚部)
amplitudes = [
    (0.5, 0.0),                    # α:|0⟩ 的振幅
    (math.sqrt(3) / 2, 0.0),       # β:|1⟩ 的振幅
]

# 2) 映射为可计算数组:实部数组与虚部数组分离,便于后续线性代数运算
real = [a[0] for a in amplitudes]
imag = [a[1] for a in amplitudes]
psi = [complex(r, i) for r, i in amplitudes]

# 3) 归一化验证:⟨ψ|ψ⟩ = Σ |a_i|^2
norm_sq = sum(abs(a) ** 2 for a in psi)
tolerance = 1e-9
residual = abs(norm_sq - 1.0)

print("psi =", psi)
print("norm_sq =", norm_sq)
print("residual =", residual)
print("normalized =", residual <= tolerance)

# 4) 由振幅直接得到测量概率(|0⟩、|1⟩ 的计算基概率)
probs = [abs(a) ** 2 for a in psi]
print("probs =", probs, "sum =", sum(probs))

预期输出(由给定输入直接推出,非实测):

psi = [(0.5+0j), (0.8660254037844386+0j)]
norm_sq = 1.0
residual = 0.0
normalized = True
probs = [0.25, 0.75] sum = 1.0

注意 math.sqrt(3)/2 在浮点下与 0.75 的平方和恰好落在 1.0 附近,残差通常为 0 或极小值;判断时始终用容差比较,不要用 == 1.0 直接判等。

建模检查要点

检查项本例取值不通过时的典型原因
基矢顺序[|0⟩, |1⟩]把 β 放在下标 0,导致概率分布颠倒
振幅类型复数(虚部为 0)用实数存储含虚部振幅,丢失相位信息
归一化残差0.0 ≤ 1e-9系数抄写错误,如把 √3/2 写成 √2/2
概率和0.25 + 0.75 = 1.0用振幅直接相加而非模平方
若后续需要扩展到多量子比特,只需把“基矢顺序”升级为张量积顺序(如 |00⟩、|01⟩、|10⟩、|11⟩),数组长度变为 2ⁿ,映射与归一化验证逻辑完全不变。