Opis układów kwantowych traktowanych jako zamknięte można zawsze uzyskać włączając do badanego układu jego otoczenie. Jeśli otoczenie bedzie dostatecznie duże można obliczyć ewolucję kwantową rozwiązując odpowiednie rówanie von Neumanna (Schroedingera) dla stanów (stanów czystych) układu:
$\dot \rho_{\rm tot}(t) = -\frac{i}{\hbar}[H_{\rm tot}, \rho_{\rm tot}(t)],$
Jednak w większości przypadków podział na układ i jedo otoczenie jest uzasadniony z praktycznego punktu widzenia:
$ H_{\rm tot} = H_{\rm sys} + H_{\rm env} + H_{\rm int},$
gdzie w zasadzie interesująca jest dynamika części "sys". Rozwiązanie równania wyjąciowego i wykonanie śladu częściowego ze względu na stopnie swobody otoczenia jest w ogólności niewykonalne. Wyjątkiem jest kilka szczególnych przypadków, w których rozwiązywalnośc problemu wynika z istanienia praw zachowania (symetrii).
Na szczęście dzięki teorii kwantowych układów otwartych możliwe jest wyprowadzenie efektywnych równań opisujacych dynamikę podukłądu "sys" uwzględniających dekoherencję. Tutaj ograniczymy się do najbardzieju podstawowego: fenomenologicznego równania fundamentalnego typu Lindblada. Równianie to opisuje przybliżenie markowowskie dynamiki układu i jego postać może zostać uzasadniona w drodze roachunku perturbacyjnego ze względu na $H_{\rm int}$:
$ \dot\rho(t)=-\frac{i}{\hbar}[H,\rho(t)]+\sum_n \frac{1}{2} \left[2 C_n \rho(t) C_n^{+} - \rho(t) C_n^{+} C_n - C_n^{+} C_n \rho(t)\right]$ ($\bullet$)
Operatory
$C_n = \sqrt{\gamma_n} A_n$
służą nam do fenomenologicznego opisu dekoherencji.
A. W przypadku, gdy operatory $H$ oraz $C_n$ są wyrażone macierzami spinowymi równanie ($\bullet$) opisiuje dynamikę (relaksację) spinu (qubitu) lub może być wykorzystane w opisie dekoherencji atomów.
B. Jeśli $H,C_n$ wyrażają sie przez operatory $a,a^\dagger$ reprezentujace algebrę Heisenberga-Weyla $[a,a^\dagger]=1$ to równanie ($\bullet$) opisuje różnorakie problemy optyki kwantowej
C. W przypadku, gdy w równianiu ($\bullet$) wystepują oba typy operatorów można je wykorzystać do nierelatywistecznego opisu oddziaływania światła z materią.
from qutip import *
from pylab import *
%pylab inline
Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['power', 'linalg', 'draw_if_interactive', 'random', 'save', 'load', 'info', 'fft'] `%pylab --no-import-all` prevents importing * from pylab and numpy
Określmy postać operatorów:
H=sigmaz()
oraz dysyspatora $D=C_1$
D=sqrt(0.1)*sigmax()
ustalmy warunek początkowy:
psi00=(basis(2,0)+basis(2,1)).unit()
psi0=ket2dm(psi00)
i obliczmy dynamikę układu
tlist=linspace(0,5.0,10.0)
outlist=zeros(len(tlist))
qq=mesolve(H, psi0, tlist, [D], [])
uzyskane rozwiązanie wykorzystamy do obliczenia ewolucji entropii:
for i1 in range(len(tlist)):
rho=qq.states[i1]
outlist[i1]=entropy_vn(rho)
której wizualizację przedstawiamy poniżej:
plot(tlist,outlist,'-',label='', linewidth=4)
xlabel('t',fontsize=20)
ylabel('SvN',fontsize=20)
show()
Analogiczniie przeanalizujemy dynamikę układu optycznego, zakładając obcięcie przestrzeni stanół do $N=10$:
N=10
H=create(N)*destroy(N)
D=sqrt(0.1)*destroy(N)
Zakładamy, że w chwili początkowej pole jest w stanie $|N=2\rangle$:
psi0=fock_dm(N,2)
tlist=linspace(0,5.0,10.0)
outlist=zeros(len(tlist))
qq=mesolve(H, psi0, tlist, [D], [])
tym razem obliczymy średnią liczbę fotonów w obecności dekoherecji:
for i1 in range(len(tlist)):
rho=qq.states[i1]
outlist[i1]=(rho*num(N)).tr()
i przedstawimy wizualizację wyniku:
plot(tlist,outlist,'-',label='', linewidth=4)
xlabel('t',fontsize=20)
ylabel('<N>',fontsize=20)
show()
Rozważmy układ
$H=\sigma_z\otimes\sigma_z$,
oraz bilokalną dekoherencję daną przez
$A_1= \sigma_x\otimes\mathbb{I}$
$A_2= \mathbb{I}\otimes\sigma_x$
H=tensor(sigmaz(),sigmaz())
d1=sqrt(0.1)*sigmax()
D1=tensor(qeye(2),d1)
D2=tensor(d1,qeye(2))
Poczatkowo układ jest w stanie Bella:
psi00=(tensor(basis(2,0),basis(2,0))+tensor(basis(2,1),basis(2,1))).unit()
psi0=ket2dm(psi00)
tlist=linspace(0,5.0,10.0)
outlist=zeros(len(tlist))
Obliczmy dynamikę:
qq=mesolve(H, psi0, tlist, [D1,D2], [])
a intersuje nas zanik splątania (używamy funkcji concurrence() ) w obecności dekoherencji:
for i1 in range(len(tlist)):
rho=qq.states[i1]
outlist[i1]=concurrence(rho)
wynik przedtawiamy w postaci wizualizacji graficznej:
plot(tlist,outlist,'-',label='', linewidth=4)
xlabel('t',fontsize=20)
ylabel('Concurrence',fontsize=20)
show()