我试图将6x6矩阵的特征值作为单个参数的函数来求解,我将其称为“ e”。从代码中可以看到,我在“失谐”中评估了特征值的范围。我想将这6个特征值绘制为该失谐参数的函数。但是,由于算法linalg.eigh()以升序返回特征值的事实,有关什么特征值对应于什么特征向量的信息会丢失。因此,例如能量为100和-100的水平线应为相同的颜色,因为它们应属于同一特征向量。但是我简单地按照得到的顺序从linalg.eigh()中保存了特征值。而且此顺序与特征向量无关,因此它们分裂为不同的颜色。 所以我的问题是,我该如何跟踪哪些特征值属于什么特征向量?很抱歉,如果不清楚,我本人一直难以理解问题。
from scipy import linalg as la
ez = 100
dez = 14
t = 10
U = 1000
e=0
hc=np.zeros([6,6])
hc[0,0]=-ez
hc[1,1]=-dez/2;hc[1,4:6]=t
hc[2,2]=dez/2;hc[3,4:6]=-t
hc[3,3]=ez
hc[4,1]=t;hc[4,2]=-t;hc[4,4] = U-e
hc[5,1]=t;hc[5,2]=-t;hc[5,5]=U+e
detuning=np.arange(-1500,1500,10)
Energy = np.zeros((6,len(detuning)))
for i, ep in enumerate(detuning):
e = ep
hc=np.zeros([6,6])
hc[0,0]=-ez
hc[1,1]=-dez/2;hc[1,4:6]=t
hc[2,2]=dez/2;hc[3,4:6]=-t
hc[3,3]=ez
hc[4,1]=t;hc[4,2]=-t;hc[4,4] = U-e
hc[5,1]=t;hc[5,2]=-t;hc[5,5]=U+e
w,v = la.eigh(hc)
Energy[:,i] = w
for i in np.arange(6):
plt.plot(detuning,Energy[i,:], label = i)
plt.legend()
plt.xlabel("$\epsilon (\mu$eV)",fontsize=15)
plt.ylabel("Energy ($\mu$eV)",fontsize=15)
plt.ylim([-200,200])
plt.show()
答案 0 :(得分:0)
这应该适用于您的hc矩阵
ez = 100
dez = 14
t = 10
U = 1000
e=0
hc=np.zeros([6,6])
hc[0,0]=-ez
hc[1,1]=-dez/2;hc[1,4:6]=t
hc[2,2]=dez/2;hc[3,4:6]=-t
hc[3,3]=ez
hc[4,1]=t;hc[4,2]=-t;hc[4,4] = U-e
hc[5,1]=t;hc[5,2]=-t;hc[5,5]=U+e
然后
e_vals, e_vecs = la.eig(hc)
您既有特征值又有特征向量。
e_vals
array([ 100. +0.j, -7.19857058+0.j, 1000.19857058+0.j,
1000. +0.j, -100. +0.j, 7. +0.j])
e_vecs
array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.00000000e+00, 0.00000000e+00],
[ 0.00000000e+00, -9.99899724e-01, 1.40379443e-02,
-1.80074450e-31, 0.00000000e+00, 1.41795299e-02],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 9.99798653e-01],
[ 1.00000000e+00, 1.85217641e-03, -1.57065317e-02,
2.01599682e-31, 0.00000000e+00, 2.13455289e-03],
[ 0.00000000e+00, 9.92753319e-03, 7.06949871e-01,
7.07106781e-01, 0.00000000e+00, 9.92567093e-03],
[ 0.00000000e+00, 9.92753319e-03, 7.06949871e-01,
-7.07106781e-01, 0.00000000e+00, 9.92567093e-03]])