Я пытаюсь решить собственные значения матрицы 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()