Я вычислил собственные значения якобианской матрицы 5x5 во время цикла по параметру R.
Я получаю как действительные, так и комплексные собственные значения, как и ожидалось, но все они приведены в сложной форме. Проблема, с которой я сталкиваюсь, заключается в том, что numpy.sort
сортирует эти значения по действительной части каждого собственного значения, которое полезно для точки, но действительная часть каждого собственного значения либо увеличивается / уменьшается, так как я меняюсь R.
Таким образом, возникает точка, в которой мне нужно сортировать по мнимой части, чтобы сохранить каждое собственное значение в той же записи в выходном массиве. Картинка ниже показывает, что я имею в виду. Я получаю 3 реальных собственных значения, отображаемых в позициях 2, 3 и 4 в массиве, переходя в позиции 0,1 и 4. Как я могу отсортировать по мнимой части? Я добавил свой код ниже. Колонка переключения собственных значений
import numpy.linalg as la
for a,b,c,d,e,f in zip(T_S, T_C, S_S, S_C, w, R):
eigvals = la.eigvals(np.array([[-f, e, 0, 0, b],
[-e, -f, 0, 0, -a],
[0, 0, -f, e, d],
[0, 0, -e, -d, -c],
[-1/(2*F), 0, D/(2*F), 0, -1/F]]))
eigvals = np.sort(eigvals)
print(np.round(eigvals, decimals = 3))
РЕДАКТИРОВАТЬ: Подумав об этом, я не думаю, что сортировка поможет мне здесь. Спасибо тем, кто ответил.
I w * sh для сохранения чисто реального собственного значения в одной и той же позиции в массиве для каждой итерации. Сортировка - это именно то, что заставляет ее менять положение.
for i = 4.2 eigvals = [-0.33-4.16j -0.33+4.16j -0.33+0.j 0. -4.2j 0. +4.2j ]
for i = 4.3 eigvals = [-0.35+0.j -0.33-4.26j -0.33+4.26j 0. -4.3j 0. +4.3j ]
В случае i = 4.2 действительное root находится в положении 2, но для i = 4.3 действительная часть уменьшается, поэтому np.sort перемещает ее в позицию 0.
Я не уверен, что есть простой способ обойти это, но любые предложения будут хороши.