Splatanie kwantowe, choc najlepiej znane, nie jest jedynym efektywnym rodzajem korelacji kwantowych. Istnieją inne rodzaje korelacji, istotnie nieklasycznych, które istnieją nawet w niobecnosci splątania. Przykładem miary takich korelacji jest quantum discord tłumaczony jako niezgodność, niedopasowanie lub nawet zgrzyt kwantowy. Dla unikniecia zamieszania w terminologii poniżej użyjemu skrótu QD. Badanie QD poczatkowo wiązało się z zagadnieniem zupełnej dodatniości dynamiki kwantowej. Jak wiadomo, oczekuje się aby dynamika kwantowa praekształacała stany kwantowe w stany (dodatniość), również w obecności "ślepych i martwych" otoczeń (zupełna dodatniość). Jak wiadomo początkowe splatanie badanego ukłądu i otoczenia moze prowadzić do dynamiki niedodatniej lub dodatniej, lecz nie zupełnie dodoatniej. Okazuje się jednak, że warunkiem, który badany być winien w tym kontekście jest warunek znikania QD implikujacy zupełną dodatniść.
Niesttey, brak jednoznacznego umocowania matematycznego QD, czegoś w rodzaju języka iloczynów tensorowych lub świadków splątania powoduje, że istnieje przynajmniej kilka propozycji definiowania korelacji nieklasycznych. Tutaj ograniczymy sie do jednej, co wiecej ograniczymy sie do bardzo szczególnego przypadku korelacji kwantowych mierzonych przez QD w przypadku układów złożonych z pary qubitów.
Przystapmy do zdefiniowania QD. Rozważmy parę qubitów: $A$ and $B$.
Całkowite korelacje (bez podziału na klasyczne i kwantowe) są ujęte w entropii wzajemnej (mutual entropy) policzonej dla $A$ oraz $B$. Informację ta można sformułowac w postaci różnicy entropii:
$T=S(\rho_A)+S(\rho_B)-S(\rho_{AB}) $
$S(\rho)=-\mbox{Tr}\left(\rho\ln(\rho)\right)$
gdzie $\rho_{A}=\mbox{Tr}_B\rho_{AB}$ oraz $\rho_{B}=\mbox{Tr}_A\rho_{AB}$.
To co wiemy o $A$, pod warunkiem, że na $B$ przeprowadzony został pomiar (rzutowy) $\Pi_j^B$, można opisać za pomocą entropii warunkowej (conditional entropy)
$ S_{\Pi^B_j}=\sum_{j=0}^{1} q_j S(\rho_A^j) $
$\rho_A^j=\frac{1}{q_j}\mbox{Tr}_B\left[\left({\bf 1}_A\otimes \Pi_j^B \right) \rho_{AB} \left({\bf 1}_A\otimes \Pi_j^B \right)\right] $
$q_j= \mbox{Tr}_{AB}\left[\left({\bf 1}_A\otimes \Pi_j^B \right)\rho_{AB} \right]$
która, maksymalizowana wzgledem wszystkich pomiarów daje klasyczną część całkowitych korelacji.
$ C=S(\rho_A)-\max_{\Pi_j^B}S_{\Pi^B_j} $
Pozostała część:
$ D= T-C $
to QD.
Założenie upraszczające, zgodnie z którym ograniczamy rozważania do pary qubitów pozwala ograniczyć się do uwzględnienia tylko pomiarów rzutowych:
$ \Pi_0^B=\left(\begin{array}{cc} \cos^2(\theta/2) & \sin(\theta)\exp(i \phi)\\\sin(\theta)\exp(-i \phi) & \sin^2(\theta/2) \end{array} \right)$
$ \Pi_1^B={\bf 1}_B-\Pi_0^B $
gdzie $\theta ,\phi$ to standardowa parametryzacja sfery Blocha.
Rozpoczniemy od importowania niezbednych narzędzi:
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
Następnie zdefiniujemy funkcje obliczającą QD dla pary qubitów. Proszę zwrócić uwagę na parametr prec, który określa szczegółowość procedury maksymalizacyjnej. Wartość prec=10 jest niestaysfakcjonujaca, jednak wybór wyższego prec powoduje znaczące wydlużenie obliczeń.
def discord(ro):
ll=[]
prec=10
th=linspace(0,pi,prec)
ph=linspace(0,2.0*pi,prec)
for i1 in xrange(len(ph)):
phi=ph[i1]
for i2 in xrange(len(th)):
theta=th[i2]
phi=0.0
psi=cos(theta/2.0)*basis(2,0)+exp(1J*phi)*sin(theta/2.0)*basis(2,1)
p0=ket2dm(psi)
p1=qeye(2)-p0
P0=tensor(qeye(2),p0)
P1=tensor(qeye(2),p1)
####################
q0=(P0*ro).tr()
r20=(P0*ro*P0).ptrace([0])
ro0=r20.unit()
####################
q1=(P1*ro).tr()
r21=(P1*ro*P1).ptrace([0])
ro1=r21.unit()
###################
r1=ro.ptrace([0])
#r2=ro.ptrace([1])
JJ=entropy_vn(r1,e)-q0*entropy_vn(ro0,e)-q1*entropy_vn(ro1,e)
ll=ll+[real(JJ)]
#
r2=ro.ptrace([1])
II=entropy_vn(r1,e)+entropy_vn(r2,e)-entropy_vn(ro,e)
DD=II-max(ll)
return DD
Zastoswanie funkcji discord() rozpoczniemy od najbardziej oczywistego przypadku stanu Bella:
B0=(tensor(basis(2,0),basis(2,0))+tensor(basis(2,1),basis(2,1))).unit()
Argumentem funkcji discord() jest macierz gestości. Do przekształacenia B0 w odpowiadajacy mu stan BB0 wykorzystamy funkcje ket2dm():
BB0=ket2dm(B0)
Następniec obliczym QD:
discord(BB0)
0.69314718055994307
Jest to oczywiście maksymalna wartość QD dostepna dla pary qubitów.
W następnym kroku przygotujemy wizualizację wartości QD dla pary qubitów w zdepolaryzowanym stanie Bella:
plist = linspace(0.0, 1.0, 10.0)
clist=zeros(len(plist))
W następnym kroku obliczmy QD.
Uwaga obliczenia czasochłonne.
for i1 in xrange(len(plist)):
p=i1*0.1
rho=(1-p)*BB0+p/4.0*tensor(qeye(2),qeye(2))
c=discord(rho)
clist[i1]=c
Uzyskane wyniki nakreślimy:
plot(plist,clist,'-.r',label='', linewidth=4)
xlabel('p',fontsize=20)
ylabel('QD',fontsize=20)
show()
Następnym ćwiczeniem niech będzie nakreślenie zmian QD w ewolucji w czasie stanu Bella. Rozważamy dwa qubity, których dynamika generowana jest nastepującym hamiltonianem:
H1=tensor(qeye(2), sigmaz())
H2=tensor(sigmaz(),qeye(2))
Hint=tensor(sigmax(),sigmax())
H=H1+H2+Hint
Oddziaływanie pomiedzy qubitami zadane przez $Hint$ może wpływać konstruktywnie na QD. W chwili początkowej układ jest w stanie Bella:
psi0=BB0
W kolejnym kroku wykonujemy obliczenia dynamiki układu przy użyciu funkcji mesolve():
tlist=linspace(0.0, 1.0, 5.0)
qlist=zeros(len(tlist))
qq=mesolve(H, psi0, tlist, [], [])
for i1 in xrange(len(tlist)):
rho=qq.states[i1]
c=discord(rho)
qlist[i1]=c
Uzyskane wyniki nakreślamy:
plot(tlist,qlist,'-.r',label='', linewidth=4)
xlabel('t',fontsize=20)
ylabel('QD',fontsize=20)
show()