A szilárdtestfizikában a Su$-$Schrieffer$-$Heeger-modell egy végtelen periodikus poliacetilén láncot ír le. A modell Hamilton-operátora az alábbi 2x2-es hermitikus mátrix: $$ H=\left( \begin{array}{cc} 0 & 1+w e^{-i k} \\ 1+w e^{i k} & 0 \\ \end{array} \right). $$ A fenti kifejezésben $k$ a hullámszámvektor, melynek értéke a $[-\pi,\pi]$ intervallumon változhat, $w$ pedig egy valós szám, melynek értéke $0.5$ és $1.5$ között változhat. Készítsünk egy interaktív ábrát, mely a Hamilton-operátor sajátértékeit ábrázolja $k$ függvényében, ahol egy csúszka segítségével $w$ értékét változtathatjuk!
Először betölrjük a pylab
és az ipywidgets
csomagot.
%pylab inline
from ipywidgets import *
Ezután definiáljuk a függvényt, ami elvégzi az ábrázolás.
def abrazol(w):
k = linspace(-pi, pi, 100) # Tömb a k értékeknek
lambda_1 = zeros(len(k)) # Tömbök az ábrázolandó sajátértékeknek (mivel 2x2-es mátrixról van szó, két sajátérték lesz)
lambda_2 = zeros(len(k))
for i in range(len(k)): # Minden k-ra kiszámoljuk a sajátértékeket, és ezeket eltároljuk a lambda tömbökben
Hi = matrix([[0, 1 + w * exp(-1j * k[i])], [1 + w * exp(1j * k[i]), 0]])
lambda_1[i], lambda_2[i] = eig(Hi)[0]
plot(k, lambda_1) # Majd ábrázoljuk a sajátértékeket a k hullámszám függvényében
plot(k, lambda_2)
xlabel("k", size=12)
ylabel("sajátérték", size=12)
title("H sajátértékei k függvényében", size=18, y = 1.05)
xticks(linspace(-4, 4, 9))
yticks(linspace(-3, 3, 7))
Majd az interact()
függvénnyel meghívjuk az előbb definiált függvényt, ezzel a w
paraméter értékét kedvünkre tudjuk módosítani.
(A program figyelmeztet, hogy a komplex számnak elveszik a képzetes része, de ezzel nem kell foglalkozni, hiszen az ilyen alakú mátrixok sajátértéke biztos, hogy valós, maximum a kerekítési hibák miatt lehet, hogy a kapott sajátértékeknek van kicsi képzetes része.)
interact(abrazol, w=FloatSlider(min=-0.5, max=1.5, step=0.02, value=0.5))