根据参数计算矩阵的特征值

时间:2018-10-11 16:32:21

标签: python matrix eigenvalue

我试图将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()

给予 enter image description here plt.show()

1 个答案:

答案 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]])