我正在使用紧束缚模型,并且正在尝试学习如何以数值
DOS 由下式给出
其中是色散关系 - 在 1D 中,它的形式,其中是我选择为 1 的参数。我们也可以将其写为积分,
我们有几种估计 DOS 的方法。我采用了两种方法,这两种方法似乎都对收敛的数值参数非常敏感。
使用 Delta“函数”的洛伦兹近似,。代码是
# Approximate the delta function def delta(x): return (1/pi)*(eps/(x**2 + eps**2))然后在我的k s范围内简单地计算上述总和,如下所示的一维情况。
# Use summation form of density of states for numeric calculation def N(E): D = sum([delta(E - disp_e(k1)) for k1 in ks]) # Minimum D for every E should be pi/4 for the 1D case. Unfortunately, it's going to 0 mostly. Why? How? dos = (1/Num_sites) * D return dos将状态的 DOS 计算为系统极点处格林函数的虚部,,其中再次应该是一个小参数。这是 1D 中的函数的代码,尽管我也为 2D 和 3D 完成了它们:
# Try to get DOS by summing over k-points of the lattice Green's function def Greens(E, e_k): return (1/Num_sites)*(1/(E - e_k + 0.05*1.0j)) def N2(E): D = (-1/(N*pi))*(sum([Greens(E, disp_e(k1)) for k1 in ks])).imag return D
最后,谈谈我的问题。我花了很长时间(10 个小时)试图弄清楚为什么我的代码没有收敛到一维分析解决方案,尽管增加了更多的 k 点或对能量有更精细的分辨率。
事实证明,尽管有定义,但我选择的参数太小了。的顺序上选择数字,但最终我发现仅在格林函数方法的和 0.01 之间时才显示正确的数值结果-0.05 用于 delta 函数方法。
这是我最终得到的一维的正确解,包括解析解和数值解。这适用于 delta 函数方法的 epsilon = 0.01。
这是我将 epsilon 参数更改为更小时得到的结果。振荡在更小的ε处变成发散,我没有得到任何数值解。
我的问题是——为什么?这些定义暗示了一个小的,此外,我看不出为什么两个单独的数值方法都不会因为相同的原因而收敛。这些近似值在任何地方都有稳定性/收敛性分析吗?
我想知道的原因是因为我想研究没有解析解的系统,如果我的解的质量随着所谓的任意参数而不规律地变化,我无法确定我的数值解!