首先计算能带和并保存下边缘态的LDOS
nk = 256
N = 512
k = np.linspace(0,2*pi,nk)
band = np.zeros((4*N, nk))
Ak = np.zeros((4*N,nk),dtype="complex")
for i in range(nk):
Hk0 = Hamiltonian_H0_SU4(k[i],N)
E, A = LA.eigh(Hk0)
band[:,i] = E
Ak[:,i] = A[:,N-1]
画能带图
for i in range(4*N):
plt.plot(k,band[i,:])
plt.ylim((-1,1))
利用本征态构造激发谱哈密顿量
def Hamiltonian_Heff(nk,iq,Ak,U,N):
H = np.zeros((nk,nk),dtype='complex')
for j in range(nk):
j_q = (j - iq + nk)%nk
for i in range(j,nk):
i_q = (i-iq + nk)%nk
H[j,i] = -np.sum(Ak[:,i_q].conj()*Ak[:,i]*Ak[:,j_q]*Ak[:,j].conj())
H = H + H.T
for i in range(nk):
i_q = (i - iq + nk)%nk
H[i,i] = np.sum(np.power(np.absolute(Ak),2).sum(axis=1)*np.power(np.absolute(Ak[:,i_q]),2))
return U*H/N
对角化激发谱哈密顿量得到磁振子, 为了计算谱函数,这里还要把本征函数保存下来
U = 1.0
band_mag = np.zeros((nk, nk))
psi = np.zeros((nk,nk,nk),dtype='complex')
for i in range(nk):
Heff = Hamiltonian_Heff(nk,i,Ak,U,N)
E, A = LA.eigh(Heff)
psi[:,:,i] = A
band_mag[:,i] = E
画磁振子的能带图
for i in range(nk):
plt.plot(k,band_mag[i,:])
#plt.xlim((0,2*pi/3))
plt.ylim((0,0.1))
对于矩阵形式后,k是离散的矩阵空间,未完待续。