1. 课程导入与仿真环境搭建

单量子比特受驱动演化是量子信息与量子光学中最基础、也最常被复用的模型之一。它的物理图像非常清晰:一个二能级系统(例如超导量子比特的基态 |0⟩ 与激发态 |1⟩,或原子的两个能级)在外部经典驱动场(通常是微波或激光)作用下,能级间发生受激跃迁,系统状态在布洛赫球上绕某个轴旋转。理解这一过程,是后续学习拉比振荡、共振与失谐、旋转波近似、脉冲控制乃至量子门实现的共同起点。

本课程的目标不是推导公式,而是建立“可运行、可观察、可调参”的仿真能力。我们将用 Python 生态中的 QuTiP(Quantum Toolbox in Python)把上述物理过程变成可执行的数值实验:定义哈密顿量、设定初态、调用求解器、提取可观测量并绘图。学完本章,你应当能独立跑通第一个二能级演化示例,并说清楚每一行代码对应哪个物理量。

物理背景:驱动下的二能级系统

在旋转波近似下,驱动二能级系统的哈密顿量可写为

H = (ħ/2) * [ ω₀ σ_z + Ω (cos φ · σ_x + sin φ · σ_y) ]

其中 ω₀ 是比特的跃迁频率(失谐量 Δ = ω_d − ω₀ 描述驱动频率与跃迁频率的偏差),Ω 是拉比频率(驱动强度),φ 是驱动相位。当驱动与跃迁共振(Δ = 0)时,若初态为 |0⟩,激发态概率按 P₁(t) = sin²(Ωt/2) 振荡,这就是拉比振荡。本课程约定:σ_z 的本征态 |0⟩ 对应能量较低者,布洛赫矢量指向 +z 表示 |0⟩;驱动相位 φ = 0 时旋转轴沿 x 方向。全文与图示均采用这一约定。

仿真要回答的核心问题是:给定 ω₀、Ω、Δ、φ 和初态,系统在时刻 t 的态矢量与可观测量的期望值是什么?这正是 QuTiP 的 mesolve(或 sesolve)擅长的事。

环境搭建:Python 与 QuTiP

推荐使用 Python 3.10 及以上版本,并用 conda 创建独立环境,避免与系统包冲突。QuTiP 依赖 NumPy、SciPy、matplotlib,conda 会自动处理这些依赖。

conda create -n qutip-env python=3.11
conda activate qutip-env
conda install -c conda-forge qutip matplotlib
python -c "import qutip; print(qutip.__version__)"

若最后一行能打印出版本号(例如 5.x),说明安装成功。若使用 pip,可执行 pip install qutip matplotlib,但需自行确保 C 编译器可用,否则部分底层模块可能编译失败。安装完成后,建议在 Jupyter Notebook 中工作,便于逐格观察中间结果。

QuTiP 5 与 4.x 在求解器接口上有细微差异。本课程示例以 QuTiP 5 的写法为准;若你的版本为 4.x,mesolve 的调用方式基本兼容,但部分返回对象属性名不同,遇到报错时先核对版本文档。

第一个演化示例:共振拉比振荡

下面这段代码完整实现了一次共振驱动下的态演化。我们取 ω₀ = 2π × 5.0 GHz(典型超导比特频率量级),Ω = 2π × 20 MHz,共振驱动 Δ = 0,仿真时长 200 ns,初态 |0⟩。这些数值属于教学示例参数,用于展示量级关系,并非某台具体设备的实测值。

import numpy as np
import qutip as qt
import matplotlib.pyplot as plt

# 基本算符
sx = qt.sigmax(); sy = qt.sigmay(); sz = qt.sigmaz()
I  = qt.qeye(2)

# 示例参数(单位:角频率 rad/s)
w0 = 2*np.pi*5.0e9      # 比特跃迁频率
Om = 2*np.pi*20e6       # 拉比频率
Delta = 0.0             # 共振
phi = 0.0               # 驱动相位

# 旋转波近似下的哈密顿量
H = 0.5*(w0*sz + Om*(np.cos(phi)*sx + np.sin(phi)*sy))

# 初态 |0>,观测量:激发态概率
psi0 = qt.basis(2, 0)
P1 = qt.basis(2, 1) * qt.basis(2, 1).dag()

tlist = np.linspace(0, 200e-9, 400)
result = qt.mesolve(H, psi0, tlist, [], [P1])

plt.plot(tlist*1e9, result.expect[0])
plt.xlabel("时间 t (ns)"); plt.ylabel("P1(t)")
plt.title("共振驱动下的拉比振荡")
plt.show()

运行后应看到一条从 0 出发、在 0 与 1 之间往复的正弦平方曲线。判断仿真是否正确的依据有三点:第一,曲线起点 P₁(0) = 0,因为初态为 |0⟩;第二,振荡周期满足 T = 2π/Ω,代入 Ω = 2π × 20 MHz 得 T = 50 ns,图中第一个峰应出现在 25 ns 附近;第三,峰值应接近 1,说明共振时能量完全在两级间交换。若峰值明显低于 1 或周期不符,优先检查 Ω 的单位是否误用了 Hz 而非 rad/s。

单量子比特受驱动演化:从参数到可观测量的仿真链路 物理参数输入 ω₀ = 2π×5.0 GHz Ω = 2π×20 MHz Δ = 0(共振) φ = 0(绕 x 轴) 初态 |0⟩ 哈密顿量构建 H = ½[ω₀σ_z + Ω(cosφ·σ_x + sinφ·σ_y)] QuTiP: sigmax/sigmay/sigmaz qeye(2) 构造算符 数值求解 qt.mesolve(H, psi0, tlist, [], [P1]) tlist: 0 → 200 ns,400 点 输出:expect[0] 期望值序列 P1 = |1⟩⟨1| 投影算符 结果判读(共振拉比振荡) • P₁(0) = 0:初态为 |0⟩ • 周期 T = 2π/Ω = 50 ns • 首峰 ≈ 25 ns,峰值 ≈ 1 • 偏离则查 Ω 单位(rad/s vs Hz) P₁(t) 示意曲线 t (ns) 1 0 25 ns 首峰

从示例到可调参实验

跑通共振情形后,建议立刻做两个小改动来加深理解。第一,把 Delta 改为 2π × 5 MHz,此时哈密顿量中应加入失谐项,可改写为 H = 0.5*((w0-Delta)*sz + Om*(...)) 或在驱动频率框架下直接使用 Δ。失谐会使振荡幅度下降为 Ω²/(Ω²+Δ²) 的平方根量级,曲线不再触顶到 1,这正是“失谐降低跃迁效率”的直接体现。第二,把 phi 改为 π/2,旋转轴从 x 转向 y,虽然 P₁(t) 曲线形状不变(因为初态沿 z 轴,绕 x 或 y 旋转对激发态概率的影响在共振时相同),但若你同时观察 ⟨σ_x⟩ 或 ⟨σ_y⟩,就会看到相位差异——这提示我们:只看 P₁ 会丢失相位信息,后续章节需要引入布洛赫矢量分量。

另一个值得养成的习惯是检查数值收敛性。把 tlist 的点数从 400 增到 2000,曲线应几乎重合;若明显变化,说明步长不足。QuTiP 的自适应求解器通常能自动处理,但显式指定 options=qt.Options(nsteps=...) 在长时间演化时更稳妥。

常见报错与排查:ModuleNotFoundError: No module named 'qutip' 说明环境未激活或装错解释器;TypeError 出现在 mesolve 参数处,多为把列表误写成单个算符;绘图为空,检查 result.expect 是否为空列表——只有传入观测量列表,expect 才有内容。