[编辑以简化问题]
我正在尝试关联特征值矩阵的到矩阵的原始行。
此外,按升序对特征值进行排序是微不足道的,但这会丢弃一些信息。出于我的目的,矩阵是哈密顿量,其中不同的行具有物理意义。我总是想要与给定行对应的特征值。
我试图根据主要贡献对特征值进行排序。为此,我得到每一行的特征向量的大小(它们很复杂)并选择最大的。我使用这个索引对特征值进行排序。
# Get eigenvalues and vector of the Hamiltonian
E, V = eig(H)
# Now sort the eigenvalues by dominant contribution
sorted_order = []
for i in range(len(E)):
row = V[i,:]
row = np.absolute(row) # length of complex number <-- correct?
largest_index = np.argmax(row) # the index of the largest value
sorted_order.append(largest_index)
E_sorted = E[sorted_order]
当特征向量矩阵由对角线支配时,排序方法效果很好。但是,如果矩阵更均匀,则此排序方法将失败。
这让我相信我的排序方法可能是不正确的。或者我遇到了该eig功能的准确性问题。
有人对按主要贡献排序的替代方法有建议吗?
背景
我正在做一个半导体能带结构的模拟。的特征值 哈密顿量(下面的 8x8 矩阵)对应于不同的半导体能带,特征向量是波函数。

(注意我已经删除了两行和两列,因为我对它们的效果不感兴趣。)

图: 在图中,y 轴是特征值,x 轴对应于改变哈密顿量值的 k 空间向量。定义:在系统不受干扰,特征向量由对角项控制。这也说明了为什么我不能进行简单的能量排序:因为在某些点上带交叉。这些乐队有不同的物理意义,我想保留这些意义。
评论。排序方法(上面的 Python 代码)在以下情况下效果很好因为贡献主要由特征向量的对角线决定。然而,远离 k 空间的中心 (和) 特征向量矩阵变得更加均匀,这种排序方法失败了。我很惊讶它间歇性地失败。