Сортировка собственных значений в Python в цикле for - PullRequest
0 голосов
/ 05 июля 2018

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

Однако я не очень доволен результатом (см. Прилагаемый график), поскольку он не дает правильной зависимости от собственных значений, например горизонтальная линия синего цвета изначально переключается на оранжевый, но мне бы хотелось, чтобы он оставался синим, аналогично красной кривой. Однако я не знаю, как это реализовать.

Заранее спасибо за ваши предложения!

graph showing current results

1 Ответ

0 голосов
/ 06 июля 2018

Я полагаю, что вы слишком усложняете свою проблему здесь. Когда вы используете argsort для собственных значений и добавления, вы просто получаете списки самых высоких, вторых самых высоких, самых низких значений и т. Д. И игнорируете данные о собственных векторах. Если вы удалите всю часть argsort вашего кода, код построения будет работать нормально, так как собственные значения связаны по положению с правильным собственным вектором. enter image description here

...