学术源码, 模型和能带

方格子模型在实空间中的哈密顿量形式

之前写过一些哈密顿量矩阵的赋值代码,可能不是特别直观。这里给出哈密顿量矩阵的具体的形式。

以3×3点方格子为例。示意图如下:

\begin{aligned}H=&\begin{pmatrix} |1 \rangle, |2 \rangle, |3 \rangle, |4 \rangle, |5 \rangle, |6 \rangle, |7 \rangle, |8 \rangle, |9 \rangle \end{pmatrix}\\&\begin{pmatrix}0          &     t_x      &     0     &     t_y     &        0     &     0    &     0     &    0     &     0 \\t_x^{\dagger}    &   0       &    t_x      & 0 & t_y & 0 & 0 & 0 & 0 \\0 & t_x^{\dagger} & 0 & 0 & 0 & t_y & 0 & 0 & 0 \\t_y^{\dagger} & 0 & 0 & 0 & t_x & 0 &t_y& 0 & 0 \\0 & t_y^{\dagger} & 0 & t_x^{\dagger} & 0 & t_x & 0 & t_y & 0 \\0 & 0 & t_y^{\dagger} & 0 & t_x^{\dagger} & 0 & 0 & 0 & t_y \\0 &0 & 0 & t_y^{\dagger} & 0 & 0 & 0 & t_x & 0 \\0 & 0 & 0 & 0 & t_y^{\dagger} & 0 & t_x^{\dagger} & 0 & t_x \\0 & 0 & 0 & 0 & 0 & t_y^{\dagger} & 0 & t_x^{\dagger} & 0 \\\end{pmatrix}\begin{pmatrix} \langle 1|\\ \langle 2| \\ \langle 3| \\\langle 4| \\\langle 5| \\ \langle 6| \\ \langle 7| \\\langle 8| \\ \langle 9| \end{pmatrix}\end{aligned}

Python实现代码:

"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/5375
"""

import numpy as np

def hamiltonian(width=3, length=3):   # 方格子哈密顿量
    h = np.zeros((width*length, width*length))
    # y方向的跃迁
    for x in range(length):
        for y in range(width-1):
            h[x*width+y, x*width+y+1] = 1
            h[x*width+y+1, x*width+y] = 1
    # x方向的跃迁
    for x in range(length-1):
        for y in range(width):
            h[x*width+y, (x+1)*width+y] = 1
            h[(x+1)*width+y, x*width+y] = 1
    return h

h = hamiltonian()
print(h)

运行结果为:

此外,以上哈密顿量可以写为更紧凑的形式:

H=\sum_{x,y}\big\{ t_x |x, y\rangle\langle x+1,y|+t_y |x, y\rangle\langle x,y+1| \big\} +\mathrm{h.c.}

可以进一步改写成张量积形式[1]:

H=\sum_{x,y}\big\{ t_x |x\rangle\langle x+1|\otimes |y\rangle\langle y|+t_y |x\rangle\langle x|\otimes |y\rangle\langle y+1|\big\} +\mathrm{h.c.}

张量积形式的代码为:

"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/5375
"""

import numpy as np

def hamiltonian(width=3, length=3):   # 方格子哈密顿量
    hopping_x = np.zeros((length, length))
    hopping_y = np.zeros((width, width))
    for i in range(length-1):
        hopping_x[i, i+1] = 1
        hopping_x[i+1, i] = 1
    for i in range(width-1):
        hopping_y[i, i+1] = 1
        hopping_y[i+1, i] = 1
    h = np.kron(hopping_x, np.eye(width))+np.kron(np.eye(length), hopping_y)
    return h

h = hamiltonian()
print(h)

运算结果和上面代码的结果相同。

参考资料:

[1] 二维方格Hofstadter's butterfly

【未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

2,271 次浏览

14 thoughts on “方格子模型在实空间中的哈密顿量形式”

  1. 请问这里的哈密顿量对角化后会有9个特征值和特征向量,如何分辨每个特征值是哪个格点的能量呢,特征值的排序好像是随机的,并没有和原来的原子顺序对应上

    1. 特征值(本征值)是整个体系的能量,没有和位置对应的。波函数的分量可以和位置对应,模的平方是概率分布。

      1. 嗯嗯,波函数和位置可以对应,特征向量就是波函数,特征向量和特征值是一一对应的,特征值随机排序了,特征向量也随机排序了,那该如何确定哪个特征向量对应哪个格点位置呢,,

      2. 我用软件对角化的的时候,给出的特征向量排序是随机的,分不清哪一列对应原来的格点顺序

      3. 我刚刚发现特征值随机排序,但是特征向量排序是不会改变的,多谢大哥!

        1. 还是不对,我用matlab和python分别对角化同一个矩阵,给出的特征值和特征向量虽然一一对应,但是排序不一样

          1. 是某个波函数的分量和格点是一一对应的,不是波函数。本征值本身没有和格点的一一对应关系。

            有的求本征值算法是排序的,比如从小到大,有的没有,但没什么影响。

    1. 在实空间填矩阵元,是需要慢慢找规律。可以从简单的例子出发,对每个项赋值,然后再推广到任意大小。如果有周期性边界条件时,还得再多考虑一种情况,单独写个代码赋值。而关于斜对角和次近邻的傅里叶变换,可以参考这篇后面的内容:离散格子的傅里叶变换和反傅里叶变换

    1. vectorization的意思是直接就写成数组的样子吗?我这里循环赋值可以方便推广到不同大小的体系。

发表评论

您的电子邮箱地址不会被公开。