投影对角化详细过程

首先计算能带和并保存下边缘态的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是离散的矩阵空间,未完待续。

猜你喜欢

转载自blog.csdn.net/wwxy1995/article/details/112565623