投影严格对角化Python实现

下面Python实现尽可能利用了numpy向量化的技术。当k点比较大时,计算量还是比较大。

from math import sqrt, pi
import numpy as np
from numpy.lib.twodim_base import mask_indices
import numpy.linalg as LA
import matplotlib.pylab as plt
from scipy.linalg import block_diag

# 生成块三对角矩阵函数
def tridiag(c, u, d, N): 
    # c, u, d are center, upper and lower blocks, repeat N times
    cc = block_diag(*([c]*N)) 
    shift = c.shape[1]
    uu = block_diag(*([u]*N)) 
    uu = np.hstack((np.zeros((uu.shape[0], shift)), uu[:,:-shift]))
    dd = block_diag(*([d]*N)) 
    dd = np.hstack((dd[:,shift:],np.zeros((uu.shape[0], shift))))
    return cc+uu+dd

# 生成Hamiltonian动能部分
def Hamiltonian_H0_SU4(k,N,t=-1):
    """
    t 是最近邻hopping系数
    k 是Bloch波矢量
    N 是宽度
    """
    A = np.matrix([[sqrt(3),0,1,np.exp(-1j*k)],[0, sqrt(3),1,1],[1,1,sqrt(3),0],[np.exp(1j*k),1,0,sqrt(3)]])
    B = np.matrix([[0,0,0,0],[0,0,0,0],[1,0,0,0],[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值