Практическое QuTiP: моделирование эволюции состояний, декогеренции и запутанности

Установка окружения

Для запуска примеров (например, в Colab) установите QuTiP и стандартный Python-набор для научных вычислений. Это обеспечивает воспроизводимость и позволяет импортировать все необходимые библиотеки.

!pip install qutip matplotlib numpy


import numpy as np
import matplotlib.pyplot as plt
from qutip import *


print(" Advanced QuTip Tutorial: Quantum Dynamics & Entanglement")
print("=" * 60)

Создание квантовых состояний

Определите базисные состояния одного кубита, их суперпозиции и двумерные белловы состояния. Ниже пример создания |0>, |1>, |+>, |-> и белловых состояний с вычислением конкуренции как меры запутанности.

print("\n1. Creating Quantum States")
ground = basis(2, 0) 
excited = basis(2, 1) 
plus = (ground + excited).unit() 
minus = (ground - excited).unit() 


print(f"Ground state |0⟩: {ground.dag()}")
print(f"Superposition |+⟩: {plus.dag()}")


bell_phi_plus = (tensor(ground, ground) + tensor(excited, excited)).unit()
bell_psi_minus = (tensor(ground, excited) - tensor(excited, ground)).unit()


print(f"\nBell state |Φ+⟩ = (|00⟩ + |11⟩)/√2")
rho_bell = bell_phi_plus * bell_phi_plus.dag()
print(f"Entanglement measure: {concurrence(rho_bell):.3f}")

Квантовые вентили и операции

Используйте встроенные операторы QuTiP для матриц Паули и стройте вентили, такие как Адамард и CNOT. Применяйте их к подготовленным состояниям, чтобы проверить действие.

print("\n2. Quantum Gates and Operations")
sx, sy, sz = sigmax(), sigmay(), sigmaz()
print(f"Pauli-X matrix:\n{sx}")


hadamard = (sx + sz) / np.sqrt(2)
cnot = tensor(fock_dm(2, 0), qeye(2)) + tensor(fock_dm(2, 1), sx)


h_ground = hadamard * ground
print(f"\nH|0⟩ = {h_ground.dag()}")

Динамика: Ребби-осцилляции

Смоделируйте вынужденную двухуровневую систему с гамильтонианом, содержащим σ_z и σ_x. Эволюция начального состояния показывает осцилляции населения возбужденного состояния.

print("\n3. Quantum Dynamics: Rabi Oscillations")
omega_0 = 1.0 
omega_r = 0.5 


H = 0.5 * omega_0 * sz + 0.5 * omega_r * sx


t_list = np.linspace(0, 4*np.pi/omega_r, 100)
psi0 = ground
result = mesolve(H, psi0, t_list, [], [])


excited_pop = [expect(fock_dm(2, 1), state) for state in result.states]


plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(t_list, excited_pop, 'b-', linewidth=2)
plt.xlabel('Time (ℏ/ω)')
plt.ylabel('Excited State Population')
plt.title('Rabi Oscillations')
plt.grid(True, alpha=0.3)

Гармонический осциллятор и когерентные состояния

Перейдите к N-уровневому гармоническому осциллятору, инициализируйте когерентное состояние и эволюционируйте его под стандартным гамильтонианом. Постройте траекторию в фазовом пространстве ⟨x⟩ vs ⟨p⟩.

print("\n4. Quantum Harmonic Oscillator")
N = 20 
a = destroy(N) 
H_ho = a.dag() * a + 0.5 


alpha = 2.0 
psi0_coh = coherent(N, alpha)


t_list_ho = np.linspace(0, 2*np.pi, 50)
result_ho = mesolve(H_ho, psi0_coh, t_list_ho, [], [])


x_op = (a + a.dag()) / np.sqrt(2)
p_op = 1j * (a.dag() - a) / np.sqrt(2)


x_expect = [expect(x_op, state) for state in result_ho.states]
p_expect = [expect(p_op, state) for state in result_ho.states]


plt.subplot(1, 2, 2)
plt.plot(x_expect, p_expect, 'r-', linewidth=2)
plt.plot(x_expect[0], p_expect[0], 'go', markersize=8, label='Start')
plt.plot(x_expect[-1], p_expect[-1], 'ro', markersize=8, label='End')
plt.xlabel('⟨x⟩')
plt.ylabel('⟨p⟩')
plt.title('Coherent State Phase Space')
plt.legend()
plt.grid(True, alpha=0.3)
plt.axis('equal')


plt.tight_layout()
plt.show()

Декогеренция и открытые системы

Вводим оператор распада для взаимодействия с тепловой средой. Эволюционируем сжатое начальное состояние и отслеживаем среднее число фотонов для иллюстрации деградации когерентности.

print("\n5. Quantum Decoherence and Open Systems")
gamma = 0.2 
n_th = 0.1 


c_ops = [np.sqrt(gamma * (1 + n_th)) * a, np.sqrt(gamma * n_th) * a.dag()]


psi0_sq = squeeze(N, 0.5) * basis(N, 0)


t_list_damp = np.linspace(0, 10, 100)
result_damp = mesolve(H_ho, psi0_sq, t_list_damp, c_ops, [])


n_expect = [expect(a.dag() * a, state) for state in result_damp.states]


plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.plot(t_list_damp, n_expect, 'g-', linewidth=2)
plt.xlabel('Time')
plt.ylabel('⟨n⟩')
plt.title('Photon Number Decay')
plt.grid(True, alpha=0.3)

Визуализация функции Вигнера

Посчитайте квази-распределение Вигнера для конечного демпфированного состояния и постройте контурную карту в фазовом пространстве, чтобы увидеть проявления неклассических особенностей.

print("\n6. Wigner Function Visualization")
final_state = result_damp.states[-1]
xvec = np.linspace(-4, 4, 50)
W_final = wigner(final_state, xvec, xvec)


plt.subplot(1, 2, 2)
plt.contourf(xvec, xvec, W_final, 20, cmap='RdBu')
plt.colorbar(label='W(x,p)')
plt.xlabel('x')
plt.ylabel('p')
plt.title('Wigner Function (Final State)')


plt.tight_layout()
plt.show()

Динамика запутанности

Свяжите два кубита через взаимодействие σ_x ⊗ σ_x и эволюционируйте начальное прямое произведение. Измеряйте конкуренцию на каждом шаге времени и наблюдайте образование и исчезновение запутанности.

print("\n7. Entanglement Dynamics")
omega1, omega2 = 1.0, 1.1
g = 0.1 


H_coupled = (omega1/2 * tensor(sz, qeye(2)) +
            omega2/2 * tensor(qeye(2), sz) +
            g * tensor(sx, sx))


psi0_prod = tensor(plus, ground)


t_list_ent = np.linspace(0, 20, 200)
result_ent = mesolve(H_coupled, psi0_prod, t_list_ent, [], [])


entanglement = [concurrence(state * state.dag()) for state in result_ent.states]


plt.figure(figsize=(8, 5))
plt.plot(t_list_ent, entanglement, 'purple', linewidth=2)
plt.xlabel('Time')
plt.ylabel('Concurrence')
plt.title('Entanglement Generation in Coupled Qubits')
plt.grid(True, alpha=0.3)
plt.ylim(0, 1)
plt.show()

Дальнейшие задания

Примеры охватывают подготовку состояний, операции и вентили, эволюцию во времени с mesolve(), моделирование декогеренции, визуализацию в фазовом пространстве и оценку запутанности. Попробуйте расширить ноутбук: реализуйте коды коррекции ошибок, симулируйте квантовые алгоритмы, изучайте модель Джейнса-Каммингса или внедряйте управление с обратной связью и измерениями в открытых системах.