Я вычисляю и строю собственные значения массива 5x5 как функцию параметра x. Я знаю, что мне нужно отсортировать собственные значения, так как они не обязательно упорядочены с помощью numpy, поэтому самый простой способ - использовать argsort () и отсортировать их от наименьшего к наибольшему (или наоборот):
import matplotlib.pyplot as plt
import numpy as np
#matrix values
A=20
B=8
C=10
D = 10
E=30
q1 = 6
q2=5
xx = np.linspace(0,30,300)
ev1=np.array([])
ev2=np.array([])
ev3=np.array([])
ev4=np.array([])
ev5=np.array([])
for x in np.arange(0,30, 0.1):
vals, vecs = (np.linalg.eig([[A,0,x,0,0],[0,B,q1,0,0][x,q1,C,0,0][q2,0,q2,D,0],[0,0,0,0,E]]))
idx = vals.argsort()[::-1]
vals = vals[idx]
vecs = vecs[:,idx]
ev1=np.append(ev1, vals[0])
ev2=np.append(ev2, vals[1])
ev3=np.append(ev3, vals[2])
ev4=np.append(ev4, vals[3])
ev5=np.append(ev5, vals[4])
plt.figure(figsize=(7.5,4.5))
plt.plot(xx, ev1)
plt.plot(xx, ev2)
plt.plot(xx, ev3)
plt.plot(xx, ev4)
plt.plot(xx, ev5)
plt.savefig('eigenvalues.jpg')
plt.show()
Однако я не очень доволен результатом (см. Прилагаемый график), поскольку он не дает правильной зависимости от собственных значений, например горизонтальная линия синего цвета изначально переключается на оранжевый, но мне бы хотелось, чтобы он оставался синим, аналогично красной кривой. Однако я не знаю, как это реализовать.
Заранее спасибо за ваши предложения!