我正在根据参数x计算和绘制5x5数组的特征值。我知道我必须对特征值进行排序,因为它们不一定要用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()
但是,我对结果不满意(请参见附图),因为这不能正确地反映特征值,例如蓝色的水平线最初会切换为橙色,但我希望它保持蓝色,红色曲线的相似性。但是,我不知道该如何实现。
提前感谢您的建议!