【发布时间】:2018-07-05 20:22:43
【问题描述】:
我正在计算并绘制一个 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()
但是我对结果不是很满意(见附图),因为这并没有给出特征值的正确依赖性,例如蓝色的水平线最初切换为橙色,但我希望它保持蓝色,与红色曲线相似。但是,我不知道如何实现这一点。
提前感谢您的建议!
【问题讨论】:
-
从您的问题来看,您似乎只是不知道如何设置曲线的颜色。这是真的吗?
-
不,这只是为了可视化我的问题。我的问题更深,我正在寻找一种以连续方式对特征值和相关特征向量进行排序的方法。
标签: python sorting numpy matplotlib linear-algebra