1-D Chain Toy Model——visualization of disorder and localization
40行代码计算验证安德森局域化的一个小观点:在一维体系上加一点点无序都将导致扩展态到局域态
先看阎守胜《固体物理基础》(第三版)第216页。
当随机均匀分布的width=0的时候:


(横轴:波函数的对应能级数)
(纵轴:一维晶格的空间位置)
当width=5%时:


(横轴:波函数的对应能级数)
(纵轴:一维晶格的空间位置)
当width=10%时:


(横轴:波函数的对应能级数)
(纵轴:一维晶格的空间位置)
Python 源码
import numpy as np
import matplotlib.pyplot as plt
# Name: 1-D lattice with disorder
# Date: 2023/4/11
# Author: GHz
# Parameters
width = 0.3
center = 10
hopping1 = -1
hopping2 = -1
particleNum = 1000
# Create Hamiltonian
disorderDiag = (np.random.uniform(size = particleNum)-0.5) * width + center
disorderDiag = np.diag(disorderDiag)
oneDirectionHopping = np.diag([hopping1]*(particleNum-1), -1)
anotherDirectionHopping = np.diag([hopping1]*(particleNum-1), 1)
Hamiltonian = disorderDiag + oneDirectionHopping + anotherDirectionHopping
# Diagonalize Hamiltonian
eigenvalues, eigenvectors = np.linalg.eig(Hamiltonian)
xAxis = np.arange(len(eigenvalues))
idx = np.argsort(eigenvalues)#[::-1]
eigenValues = eigenvalues[idx]
eigenVectors = eigenvectors[:,idx]
# Plot Results
plt.plot(xAxis, eigenValues)
plt.title(label="Energy levels array", fontdict={'family':'Times New Roman', 'size':19})
plt.show()
'''
for i in range(len(eigenValues)):
plt.plot(xAxis, eigenVectors[:, i] * np.conj(eigenVectors[:, i]))
plt.title(label="Energy={}".format(eigenValues[i]), fontdict={'family':'Times New Roman', 'size':19})
plt.show()
'''
plt.contourf(eigenVectors * np.conj(eigenVectors), cmap='RdBu', levels=100)
plt.colorbar()
plt.show()

