Я пытаюсь выяснить числовую интерпретацию плотности состояний для фермионной системы при периодическом потенциале.
Уравнение для плотности состояний читается
где являются собственными значениями конкретной гамильтоновой матрицы, которую я решаю. Я хотел бы использовать аппроксимацию Коши/Лоренца дельта-функции, чтобы первое уравнение теперь стало
С этого момента я не понимаю, как численно интерпретировать второе уравнение. У меня есть соответствующие собственные значения гамильтониана, но я не знаю, как получить DOS, используя . Как мне включить в моем коде? Дискретизация E для меня означает, что я беру определенное энергетическое окно вокруг определенного значения. , но я не знаю, как его структурировать, или если это должен быть массив, сетка... или что-то еще. Если E должно быть сеткой, то должна ли она быть сеткой между минимальным и максимальным значениями собственных значений энергии?
РЕДАКТИРОВАТЬ: Всем привет. Обдумав ответ Мурали, я придумал довольно плохой псевдокод, но я хотел бы знать, иду ли я в правильном направлении.
Я в основном закодировал функцию для расширенной дельта-функции Лоренца следующим образом:
def delta_l(x):
return (1/np.pi)*(epsilon/(epsilon**2 + x**2))
def dos(Egrid,Eigen):
DOS = np.zeros((AllK,1))
for j in range(Allk):
DOS[j] = (1/AllK)*sum([delta(Egrid[j]-Eigen[i]) for i in range(np.shape(Eigen)[0])])
return DOS
Здесь эпсилон получает значение 0,1 просто для проверки. Собственные векторы гамильтониана были получены путем ввода точек ФБЗ:
AllK = len(np.arange(0, 1, 0.01)) * len(np.arange(0, 1, 0.01))
E = np.zeros((AllK,4*n), float)
count = 0
for m in np.arange(0, 1, 0.01):
for f in np.arange(0, 1, 0.01):
kx = (m-f) * np.sqrt(3)/2
ky = (m+f) * 3.0/2 - 1
E[count] = Hamiltonian(kx*Kmag, ky*Kmag)
count = count + 1
import pandas as pd
EinBZ = E.flatten()
Итак, я получаю все собственные значения FBZ в этом массиве. Я иду в правильном направлении?
Думаю, вы не правильно поняли, что имеется в виду под плотностью состояний (DOS). DOS - это функция плотности вероятности (PDF). Как указал Эндрю, он принимает энергию в качестве входных данных и возвращает количество состояний для данной энергии.
Вы не можете дискретизировать поскольку они не являются собственными значениями какой-либо наблюдаемой. Это входной параметр, и дискретизировать его просто нет никакого смысла. значения дискретизированы, так как являются собственными значениями электронного гамильтониана.
Если вы рассмотрите 1-е уравнение в своем вопросе,
Чтобы вычислить DOS, вы берете E в качестве параметра, который может принимать любое значение и зафиксировать , затем вычислите двойное суммирование по зоне Бриллюэна (BZ) и полосам (n), которые являются собственными значениями вашего гамильтониана. Суммирование по БЗ — это просто суммирование по k точкам в зоне Бриллюэна и деление полученной суммы на общее количество k точек. Выберите разумную сетку k точек и убедитесь, что она сходится. Взгляните на следующую ссылку ( http://www.iiserpune.ac.in/~smr2626/hands_on/week1/july1/bzsums_mastani.pdf ), если вы не имеете никакого представления о суммировании BZ.
Псевдокод:
def delta_l(x):
return delta function(x)
def E(k):
return Eigen values for Each k
def dos(E): (let us compute for some E value. This is very inefficient way. just writing for your understanding)
sum = 0
for i in kpoints:
for j in total_number_of_bands:
sum = sum + delta_l(E-E(i)[j]) #where E(i)[j] is $j^{th}$ eigen value of $i^{th}$ kpoint
return sum/N # N is total number of kpoints
Андрей
Роджер Вадим
Безумный
Роджер Вадим
Безумный
Роджер Вадим