导入模块
import kwant
# 画图设置模块
%run matplotlib_setup.ipy
# 线性代数特征值求解模块
import scipy.linalg as la
设置体系
# 晶格类型
lat = kwant.lattice.square(a=1)
t = 1
r = 15
# 体系形状函数
def circle(pos):
x, y = pos
return x**2 + y**2 < r**2
sys = kwant.Builder()
# 座位能
sys[lat.shape(circle, (0,0))] = 4 * t
# 最近邻hooping
sys[lat.neighbors()] = -t
# 可视化体系
kwant.plot(sys);
# 确定体系完成
sys = sys.finalized()
开始计算
# 得到体系的哈密顿量
ham = sys.hamiltonian_submatrix()
# 可视化哈密顿矩阵
plt.matshow(ham==0, cmap="gray", interpolation=None)
# 本征值求解
eval, evec = la.eigh(ham)
# 画出第0个本征态
kwant.plotter.map(sys, abs(evec[:,0])**2);
利用Ipython可视化技巧,观察任意i个本征态
from ipywidgets import interact
def plot_wf(i=0):
print("Plotting wave function with index", i)
print("energy:", eval[i],"x t")
kwant.plotter.map(sys, abs(evec[:, i])**2)
interact(plot_wf, i=(0, 30))