• 如果您觉得本站非常有看点，那么赶紧使用Ctrl+D 收藏吧

# 投影对角化详细过程

6小时前 3次浏览

``````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))``````

{{o.name}}

{{m.name}}