开放量子系统的量子物理模拟库。当研究主方程、Lindblad动力学、相干性、量子光学或腔体QED时使用。最适合物理研究、开放系统动力学和教学模拟。不适用于基于电路的量子计算——请使用qiskit、cirq或pennylane进行量子算法和硬件执行。
QuTiP: Python量子工具箱
概述
QuTiP提供了用于模拟和分析量子力学系统的综合工具。它处理封闭(幺正)和开放(耗散)量子系统,并为不同场景优化了多种求解器。
安装
uv pip install qutip可选包以获取额外功能:
# 量子信息处理(电路、门)
uv pip install qutip-qip
# 量子轨迹查看器
uv pip install qutip-qtrl快速开始
from qutip import *
import numpy as np
import matplotlib.pyplot as plt
# 创建量子态
psi = basis(2, 0) # |0⟩ 态
# 创建算符
H = sigmaz() # 哈密顿量
# 时间演化
tlist = np.linspace(0, 10, 100)
result = sesolve(H, psi, tlist, e_ops=[sigmaz()])
# 绘制结果
plt.plot(tlist, result.expect[0])
plt.xlabel('时间')
plt.ylabel('⟨σz⟩')
plt.show()核心功能
1. 量子对象和态
创建和操作量子态和算符:
# 态
psi = basis(N, n) # Fock态 |n⟩
psi = coherent(N, alpha) # 相干态 |α⟩
rho = thermal_dm(N, n_avg) # 热密度矩阵
# 算符
a = destroy(N) # 湮灭算符
H = num(N) # 数算符
sx, sy, sz = sigmax(), sigmay(), sigmaz() # 泡利矩阵
# 复合系统
psi_AB = tensor(psi_A, psi_B) # 张量积参见 references/core_concepts.md 了解量子对象、态、算符和张量积的全面覆盖。
2. 时间演化和动力学
针对不同场景的多种求解器:
# 封闭系统(幺正演化)
result = sesolve(H, psi0, tlist, e_ops=[num(N)])
# 开放系统(耗散)
c_ops = [np.sqrt(0.1) * destroy(N)] # 坍缩算符
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])
# 量子轨迹(蒙特卡洛)
result = mcsolve(H, psi0, tlist, c_ops, ntraj=500, e_ops=[num(N)])求解器选择指南:
sesolve:纯态,幺正演化mesolve:混合态,耗散,一般开放系统mcsolve:量子跳跃,光子计数,单个轨迹brmesolve:弱系统-浴耦合fmmesolve:时间周期哈密顿量(Floquet)
参见 references/time_evolution.md 了解详细的求解器文档、时间依赖哈密顿量和高级选项。
3. 分析和测量
计算物理量:
# 期望值
n_avg = expect(num(N), psi)
# 熵度量
S = entropy_vn(rho) # 冯·诺依曼熵
C = concurrence(rho) # 纠缠(两量子比特)
# 保真度和距离
F = fidelity(psi1, psi2)
D = tracedist(rho1, rho2)
# 关联函数
corr = correlation_2op_1t(H, rho0, taulist, c_ops, A, B)
w, S = spectrum_correlation_fft(taulist, corr)
# 稳态
rho_ss = steadystate(H, c_ops)参见 references/analysis.md 了解熵、保真度、测量、关联函数和稳态计算。
4. 可视化
可视化量子态和动力学:
# 布洛赫球
b = Bloch()
b.add_states(psi)
b.show()
# Wigner函数(相空间)
xvec = np.linspace(-5, 5, 200)
W = wigner(psi, xvec, xvec)
plt.contourf(xvec, xvec, W, 100, cmap='RdBu')
# Fock分布
plot_fock_distribution(psi)
# 矩阵可视化
hinton(rho) # Hinton图
matrix_histogram(H.full()) # 3D柱状图参见 references/visualization.md 了解布洛赫球动画、Wigner函数、Q函数和矩阵可视化。
5. 高级方法
用于复杂场景的专门技术:
# Floquet理论(周期哈密顿量)
T = 2 * np.pi / w_drive
f_modes, f_energies = floquet_modes(H, T, args)
result = fmmesolve(H, psi0, tlist, c_ops, T=T, args=args)
# HEOM(非马尔可夫,强耦合)
from qutip.nonmarkov.heom import HEOMSolver, BosonicBath
bath = BosonicBath(Q, ck_real, vk_real)
hsolver = HEOMSolver(H_sys, [bath], max_depth=5)
result = hsolver.run(rho0, tlist)
# 置换不变性(全同粒子)
psi = dicke(N, j, m) # Dicke态
Jz = jspin(N, 'z') # 集体算符参见 references/advanced.md 了解Floquet理论、HEOM、置换不变性、随机求解器、超算符和性能优化。
常见工作流
模拟阻尼谐振子
# 系统参数
N = 20 # 希尔伯特空间维度
omega = 1.0 # 振荡器频率
kappa = 0.1 # 衰减率
# 哈密顿量和坍缩算符
H = omega * num(N)
c_ops = [np.sqrt(kappa) * destroy(N)]
# 初始态
psi0 = coherent(N, 3.0)
# 时间演化
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])
# 可视化
plt.plot(tlist, result.expect[0])
plt.xlabel('时间')
plt.ylabel('⟨n⟩')
plt.title('光子数衰减')
plt.show()两量子比特纠缠动力学
# 创建Bell态
psi0 = bell_state('00')
# 每个量子比特的局域退相位
gamma = 0.1
c_ops = [
np.sqrt(gamma) * tensor(sigmaz(), qeye(2)),
np.sqrt(gamma) * tensor(qeye(2), sigmaz())
]
# 跟踪纠缠
def compute_concurrence(t, psi):
rho = ket2dm(psi) if psi.isket else psi
return concurrence(rho)
tlist = np.linspace(0, 10, 100)
result = mesolve(qeye([2, 2]), psi0, tlist, c_ops)
# 计算每个态的concurrence
C_t = [concurrence(state.proj()) for state in result.states]
plt.plot(tlist, C_t)
plt.xlabel('时间')
plt.ylabel('Concurrence')
plt.title('纠缠衰减')
plt.show()Jaynes-Cummings模型
# 系统参数
N = 10 # 腔Fock空间
wc = 1.0 # 腔频率
wa = 1.0 # 原子频率
g = 0.05 # 耦合强度
# 算符
a = tensor(destroy(N), qeye(2)) # 腔
sm = tensor(qeye(N), sigmam()) # 原子
# 哈密顿量(旋转波近似)
H = wc * a.dag() * a + wa * sm.dag() * sm + g * (a.dag() * sm + a * sm.dag())
# 初始态:腔处于相干态,原子处于基态
psi0 = tensor(coherent(N, 2), basis(2, 0))
# 耗散
kappa = 0.1 # 腔衰减
gamma = 0.05 # 原子衰减
c_ops = [np.sqrt(kappa) * a, np.sqrt(gamma) * sm]
# 可观测量
n_cav = a.dag() * a
n_atom = sm.dag() * sm
# 演化
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[n_cav, n_atom])
# 绘制
fig, axes = plt.subplots(2, 1, figsize=(8, 6), sharex=True)
axes[0].plot(tlist, result.expect[0])
axes[0].set_ylabel('⟨n_cavity⟩')
axes[1].plot(tlist, result.expect[1])
axes[1].set_ylabel('⟨n_atom⟩')
axes[1].set_xlabel('时间')
plt.tight_layout()
plt.show()高效模拟技巧
- 截断希尔伯特空间:使用捕获动力学的最小维度
- 选择适当的求解器:
sesolve对于纯态比mesolve更快 - 时间相关项:字符串格式(例如
'cos(w*t)')最快 - 只存储所需数据:使用
e_ops而不是存储所有态 - 调整公差:通过
Options平衡精度与计算时间 - 并行轨迹:
mcsolve自动使用多个CPU - 检查收敛性:改变
ntraj、希尔伯特空间大小和公差
故障排除
内存问题:减小希尔伯特空间维度,使用 store_final_state 选项,或考虑Krylov方法
模拟缓慢:使用基于字符串的时间依赖,略微增加公差,或对刚性问题尝试 method='bdf'
数值不稳定性:减小时间步长(nsteps 选项),增加公差,或检查哈密顿量/算符是否正确定义
导入错误:确保QuTiP正确安装;量子门需要 qutip-qip 包
参考
本技能包含详细的参考文档:
- `references/core_concepts.md`:量子对象、态、算符、张量积、复合系统
- `references/time_evolution.md`:所有求解器(sesolve、mesolve、mcsolve、brmesolve等)、时间依赖哈密顿量、求解器选项
- `references/visualization.md`:布洛赫球、Wigner函数、Q函数、Fock分布、矩阵图
- `references/analysis.md`:期望值、熵、保真度、纠缠度量、关联函数、稳态
- `references/advanced.md`:Floquet理论、HEOM、置换不变性、随机方法、超算符、性能提示
外部资源
- 文档:https://qutip.readthedocs.io/
- 教程:https://qutip.org/qutip-tutorials/
- API参考:https://qutip.readthedocs.io/en/stable/apidoc/apidoc.html
- GitHub:https://github.com/qutip/qutip
兼容工具
站内相关工具
数据来源:claude-scientific-skills(MIT 许可) | 查看上游来源
上游项目:K-Dense-AI/scientific-agent-skills / claude-scientific-skills | 收录时间:2026-08-18 | 更新:2026-08-18
本页面内容基于上游开源许可项目整理,仅供学习参考。AI铺子不对第三方内容承担责任, 详情请参阅免责声明。