qutip について
QuTiPは、量子力学系をシミュレーションして解析するPythonツールボックスです。量子ダイナミクスを扱う研究者や開発者向けに、閉鎖系と開放系の双方に対応し、ユニタリ発展、散逸、軌跡、特殊な手法のソルバーを備えています。
主な機能
- 01量子状態と演算子の作成・操作
- 02閉鎖系と開放系のダイナミクス計算
- 03発展・軌跡向けの複数ソルバー
- 04期待値とエンタングルメント指標の計算
- 05状態と量子ダイナミクスの可視化
- 06Floquet法とHEOMの適用
活用シーン
- 01散逸を伴う量子系のモデル化
- 02量子ビットのエンタングルメント動力学のシミュレーション
- 03Floquet法による駆動系の解析
- 04量子状態や位相空間関数の可視化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill qutipインストール後、Claude Code で/qutipを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced.mdanalysis.mdcore_concepts.mdtime_evolution.mdvisualization.md詳細
QuTiP: Quantum Toolbox in Python
概要
QuTiP は、量子力学系のシミュレーションと解析のための包括的なツールを提供します。閉じた(ユニタリな)量子系と開いた(散逸性の)量子系の両方を扱い、さまざまなシナリオに最適化された複数のソルバーを備えています。
インストール
uv pip install qutip
追加機能のためのオプションパッケージ:
# Quantum information processing (circuits, gates)
uv pip install qutip-qip
# Quantum trajectory viewer
uv pip install qutip-qtrl
クイックスタート
from qutip import *
import numpy as np
import matplotlib.pyplot as plt
# Create quantum state
psi = basis(2, 0) # |0⟩ state
# Create operator
H = sigmaz() # Hamiltonian
# Time evolution
tlist = np.linspace(0, 10, 100)
result = sesolve(H, psi, tlist, e_ops=[sigmaz()])
# Plot results
plt.plot(tlist, result.expect[0])
plt.xlabel('Time')
plt.ylabel('⟨σz⟩')
plt.show()
主な機能
1. 量子オブジェクトと状態
量子状態と演算子を作成および操作します:
# States
psi = basis(N, n) # Fock state |n⟩
psi = coherent(N, alpha) # Coherent state |α⟩
rho = thermal_dm(N, n_avg) # Thermal density matrix
# Operators
a = destroy(N) # Annihilation operator
H = num(N) # Number operator
sx, sy, sz = sigmax(), sigmay(), sigmaz() # Pauli matrices
# Composite systems
psi_AB = tensor(psi_A, psi_B) # Tensor product
参照: 量子オブジェクト、状態、演算子、テンソル積の詳細な解説については references/core_concepts.md を参照してください。
2. 時間発展とダイナミクス
シナリオに応じた複数のソルバーを提供します:
# Closed systems (unitary evolution)
result = sesolve(H, psi0, tlist, e_ops=[num(N)])
# Open systems (dissipation)
c_ops = [np.sqrt(0.1) * destroy(N)] # Collapse operators
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])
# Quantum trajectories (Monte Carlo)
result = mcsolve(H, psi0, tlist, c_ops, ntraj=500, e_ops=[num(N)])
ソルバーの選び方のガイド:
sesolve: 純粋状態、ユニタリ時間発展mesolve: 混合状態、散逸、一般的な開いた系mcsolve: 量子ジャンプ、光子計数、個別の軌道brmesolve: 弱い系-浴結合fmmesolve: 時間周期的ハミルトニアン(Floquet)
参照: 詳細なソルバーのドキュメント、時間依存ハミルトニアン、高度なオプションについては references/time_evolution.md を参照してください。
3. 解析と測定
物理量を計算します:
# Expectation values
n_avg = expect(num(N), psi)
# Entropy measures
S = entropy_vn(rho) # Von Neumann entropy
C = concurrence(rho) # Entanglement (two qubits)
# Fidelity and distance
F = fidelity(psi1, psi2)
D = tracedist(rho1, rho2)
# Correlation functions
corr = correlation_2op_1t(H, rho0, taulist, c_ops, A, B)
w, S = spectrum_correlation_fft(taulist, corr)
# Steady states
rho_ss = steadystate(H, c_ops)
参照: エントロピー、忠実度、測定、相関関数、定常状態の計算については references/analysis.md を参照してください。
4. 可視化
量子状態とダイナミクスを可視化します:
# Bloch sphere
b = Bloch()
b.add_states(psi)
b.show()
# Wigner function (phase space)
xvec = np.linspace(-5, 5, 200)
W = wigner(psi, xvec, xvec)
plt.contourf(xvec, xvec, W, 100, cmap='RdBu')
# Fock distribution
plot_fock_distribution(psi)
# Matrix visualization
hinton(rho) # Hinton diagram
matrix_histogram(H.full()) # 3D bars
参照: ブロッホ球のアニメーション、ヴィグナー関数、Q関数、行列の可視化については references/visualization.md を参照してください。
5. 高度な手法
複雑なシナリオのための特殊な手法です:
# Floquet theory (periodic Hamiltonians)
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 (non-Markovian, strong coupling)
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)
# Permutational invariance (identical particles)
psi = dicke(N, j, m) # Dicke states
Jz = jspin(N, 'z') # Collective operators
参照: Floquet理論、HEOM、置換不変性、確率的ソルバー、超演算子、パフォーマンスの最適化については references/advanced.md を参照してください。
一般的なワークフロー
減衰調和振動子のシミュレーション
# System parameters
N = 20 # Hilbert space dimension
omega = 1.0 # Oscillator frequency
kappa = 0.1 # Decay rate
# Hamiltonian and collapse operators
H = omega * num(N)
c_ops = [np.sqrt(kappa) * destroy(N)]
# Initial state
psi0 = coherent(N, 3.0)
# Time evolution
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])
# Visualize
plt.plot(tlist, result.expect[0])
plt.xlabel('Time')
plt.ylabel('⟨n⟩')
plt.title('Photon Number Decay')
plt.show()
2量子ビットのエンタングルメントダイナミクス
# Create Bell state
psi0 = bell_state('00')
# Local dephasing on each qubit
gamma = 0.1
c_ops = [
np.sqrt(gamma) * tensor(sigmaz(), qeye(2)),
np.sqrt(gamma) * tensor(qeye(2), sigmaz())
]
# Track entanglement
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)
# Compute concurrence for each state
C_t = [concurrence(state.proj()) for state in result.states]
plt.plot(tlist, C_t)
plt.xlabel('Time')
plt.ylabel('Concurrence')
plt.title('Entanglement Decay')
plt.show()
Jaynes-Cummingsモデル
# System parameters
N = 10 # Cavity Fock space
wc = 1.0 # Cavity frequency
wa = 1.0 # Atom frequency
g = 0.05 # Coupling strength
# Operators
a = tensor(destroy(N), qeye(2)) # Cavity
sm = tensor(qeye(N), sigmam()) # Atom
# Hamiltonian (RWA)
H = wc * a.dag() * a + wa * sm.dag() * sm + g * (a.dag() * sm + a * sm.dag())
# Initial state: cavity in coherent state, atom in ground state
psi0 = tensor(coherent(N, 2), basis(2, 0))
# Dissipation
kappa = 0.1 # Cavity decay
gamma = 0.05 # Atomic decay
c_ops = [np.sqrt(kappa) * a, np.sqrt(gamma) * sm]
# Observables
n_cav = a.dag() * a
n_atom = sm.dag() * sm
# Evolve
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[n_cav, n_atom])
# Plot
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('Time')
plt.tight_layout()
plt.show()
効率的なシミュレームのためのヒント
- ヒルベルト空間を切り詰める: ダイナミクスを捉えられる最小の次元を使用する
- 適切なソルバーを選ぶ: 純粋状態には
sesolveがmesolveより高速 - 時間依存項: 文字列形式(例:
'cos(w*t)')が最も高速 - 必要なデータのみ保存する: すべての状態を保存する代わりに
e_opsを使用する - 許容誤差を調整する:
Optionsを通じて精度と計算時間のバランスを取る - 軌道の並列化:
mcsolveは複数のCPUを自動的に使用する - 収束を確認する:
ntraj、ヒルベルト空間のサイズ、許容誤差を変えて確認する
トラブルシューティング
メモリの問題: ヒルベルト空間の次元を減らす、store_final_state オプションを使用する、またはクリロフ法を検討する
シミュレーションが遅い: 文字列ベースの時間依存性を使用する、許容誤差をわずかに大きくする、または剛性の高い問題には method='bdf' を試す
数値的な不安定性: 時間刻み幅を小さくする(nsteps オプション)、許容誤差を大きくする、またはハミルトニアンと演算子が正しく定義されているか確認する
インポートエラー: QuTiP が正しくインストールされているか確認する。量子ゲートには qutip-qip パッケージが必要です
参考資料
このスキルには詳細なリファレンスドキュメントが含まれています:
references/core_concepts.md: 量子オブジェクト、状態、演算子、テンソル積、複合系references/time_evolution.md: すべてのソルバー(sesolve、mesolve、mcsolve、brmesolve など)、時間依存ハミルトニアン、ソルバーオプションreferences/visualization.md: ブロッホ球、ヴィグナー関数、Q関数、フォック分布、行列プロット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