W optyce kwantowej oscylator harmoniczny odgrywa pierwszoplanową rolę. Model ten doskonale przybliża drgania modów optycznych i mikrofalowych w osrodkach liniowych. Zastosowania optyki kwantowej związane z generowaniem na przykład stanów ścieśnionych (squeezed) wymaga jednak wykorzystania osrodków nieliniowych. Bodaj najlepiej znanym przykładem teakiego osrodka jest osrodek Kerra, w którym mody optyczne opisuje hamiltonian
$H=a^\dagger a+ \alpha (a^\dagger a^\dagger + aa)$
Naszym celem jest przprowadzenie znalizy graficznej (wizualizacji) wpływu nielionowści (poprzez amplitudę $\alpha$) na wybrane własności oscylatora nielionwego. Jako punkt odniesienia przyjmiemy osylator harmoniczny
$H_0=a^\dagger a$
Rozpoczniemy od zaimportowania niezbednych narzędzi:
from qutip import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib 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
Przestrzeń Hilberta oscylatora harmonicznego, bedąca w istocie areną dla reprezentacji algebry Heisenberga-Weyla
$[a,a^\dagger]=1$
jest nieskończenie wymiarowa. W obliczeniach wykorzystujemy obcietą przestrzeń stanów. Obcięcie ograniczamy do wymiaru $N$ okreslonego poniżej:
N=10
Dalej określamy stopień nieliniowości naszego oscylatora
x=1.0
i jego hamiltonian
H=num(N)+x*(create(N)*create(N)+destroy(N)*destroy(N))
A także odpowiadający mu model harmoniczny:
H0=num(N)
Na wstępie skupimy się na zagadnieniou stacjonarnym:
$H|\psi_n\rangle=E_n|\psi_n\rangle$
Do znalezienia widm obu oscylatorów wykorzystamy funkcję eigenstates():
kk=H.eigenstates(sort='low')
E=kk[0] # wartości własne
W=kk[1] # wektory własne
Oczywiście obliczenia numeryczne dla oscylatora harmionicznego są zbedne, jednak dla ogólności rozważań oraz jako test funkcji eigenstates() przprowadzimy je mimo to:
kk0=H0.eigenstates(sort='low')
E0=kk0[0] # wartości własne
W0=kk0[1] # wektory własne
Najprostsza wizualizacja zamieszczona poniżej pozwala zauważyć znaczący wpływ nieliowości na widmo oscylatora. Wszelkie odstępstwa od zależnosci liniowej na poniższym wykrsie są interpretowane jako efekt indukowany nieliniowością:
plot(E0,E, '.')
show()
Wpływ nieliowości na stany stacjonarne (wektory własne hamiltonianu) okreslimy przy uzyciu fidelity
$F(\rho,\sigma)=\mbox{Tr}[\sqrt{\sqrt{\rho}\sigma\sqrt{\rho}}]$
policzonej dla stanów własnych $|\psi_n\rangle$ oraz $|\psi_n^0\rangle$.
Oczywiście w tym przypadku $F$ redukuje się do iloczynu skalarnego
$F=\langle\psi_n|\psi_n^0\rangle$,
my jednak wykorzystamy w obliczeniach funkcję fidelity():
nlist=linspace(0,N-1,N)
fidlist=zeros(len(nlist))
for i1 in xrange(len(nlist)):
a=ket2dm(W[i1])
b=ket2dm(W0[i1])
fidlist[i1]=fidelity(a,b)
Uyskane wyniki nakreślimy:
plot(nlist,fidlist, '--', linewidth=7)
show()
Niezwykle ciekawym jest wpływ nieliowości na nieklasyczne własoności stanów stacjonarnych. Wpływ ten prezentujemy za pomocą funkcji Wignera.
Funcja Wignera jest jedną z najczęściej wykorzystywanych funkcji w optyce kwantowej. Tutaj zdefiniujemy ją jedynie dla stanów czystych $|\psi\rangle$ poprzez jedną z jej własności, które można otrzymać z ogólnej definicji:
$ W(\alpha)=\frac{2}{\pi}\sum_{n=0}^\infty \langle \psi|D(\alpha)|n\rangle\langle n|D^\dagger(\alpha)|\psi\rangle $
gdzie operator przesunięcia $ D $dany jest wzorem:
$ D(\alpha) = \exp(\alpha a^\dagger -\alpha^* a )$
Podstawową cechą funkcji Wignera, którą wykorzystamy jest to, że przyjmuje ona wartości ujemne dla stanów, które należą do grupy "nieklasycznych"
rho=ket2dm(W[1]) #stan, dla którego funkcja Wignera zostanie nakreślona
xvec = linspace(-5,5,200)
X, Y = meshgrid(xvec, xvec)
W = wigner(rho, xvec, xvec)
fig = figure()
ax = Axes3D(fig, azim=-62, elev=25)
ax.plot_surface(X, Y, W, rstride=2, cstride=2, cmap=cm.jet, lw=.1)
ax.set_xlim3d(-6, 6)
ax.set_ylim3d(-6, 6)
ax.set_zlim3d(0, 0.4)
title('Funkcja Wignera')
show()
W nastepnym kroku naszych rozważań przejdziemy do badania zagadnienia niestacjonarnego. Zadamy pytanie o wpływ nieliniowosci na ewolucję w czasie wybranych stanów początkowych:
psi0=ket2dm(basis(N,0))
tlist=linspace(0.0, 1.0, 5.0)
qlist=zeros(len(tlist))
Bedziemy porównywac ewolucją harmoniczną (dla $H_0$) z ewolucją generowana przez osrodek nieliniowy $H$:
qq=mesolve(H, psi0, tlist, [], [])
qq0=mesolve(H0, psi0, tlist, [], [])
Jako mierę wpływu nieliowosci ponownie wykorzystamy fidelity:
for i1 in xrange(len(tlist)):
a=qq.states[i1]
b=qq0.states[i1]
qlist[i1]=fidelity(a,b)
Uzyskany wynik nakreślimy:
plot(tlist,qlist, '--', linewidth=7)
show()