1-D Chain Toy Model——visualization of disorder and localization
40行代碼計算驗證安德森局域化的一個小觀點(diǎn):在一維體系上加一點(diǎn)點(diǎn)無序都將導(dǎo)致擴(kuò)展態(tài)到局域態(tài)
先看閻守勝《固體物理基礎(chǔ)》(第三版)第216頁。
當(dāng)隨機(jī)均勻分布的width=0的時候:


(橫軸:波函數(shù)的對應(yīng)能級數(shù))
(縱軸:一維晶格的空間位置)
當(dāng)width=5%時:


(橫軸:波函數(shù)的對應(yīng)能級數(shù))
(縱軸:一維晶格的空間位置)
當(dāng)width=10%時:


(橫軸:波函數(shù)的對應(yīng)能級數(shù))
(縱軸:一維晶格的空間位置)
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()