Соглашение о собственных векторах Numpy меняется странным образом

#python #numpy #eigenvector

#python #numpy #собственный вектор

Вопрос:

Итак, у меня есть две матрицы 36×36, которые очень похожи, и мне нужно вычислить 18-й собственный вектор. Конечно, соглашение о собственных векторах может быть немного произвольным для таких больших матриц и высоких собственных векторов, НО предполагая, что собственные значения невырождены, они должны быть различны только с точностью до фазы, верно? Ну, здесь это не тот случай.

Первая матрица: https://shrib.com/?v=nc#Pronghorn5ke1Wa6

Вторая матрица: https://shrib.com/?v=nc#KirkSDikDik7rMXOA9

Чтобы продемонстрировать, насколько близко,

 LA.norm(first-second)
  

дает 1.615464552286151e-11.

Кроме того, смещение фазы между 18-м собственным вектором каждого

 eigvec1 = LA.eigh(first)[1][:, 18]
eigvec2 = LA.eigh(second)[1][:, 18]
eigvec1/eigvec2
  

дает

 [-0.09638687-0.j        , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
        0.59816461-0.06896481j, -0.04320863-0.02599621j,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j ,  0.42297316 0.41475341j,
       -0.0985544 -0.00545411j, -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
        1.2554442  0.67027035j, -0.8480686 -0.32419582j,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j , -0.95358982-0.3011087j ,
       -0.95358982-0.3011087j ,  0.63874412 0.28189543j]
  

Как я уже сказал, похоже, что в целом наблюдается смещение фазы, за резким исключением некоторых конкретных точек, и я не уверен, почему. Мне действительно нужно вычислить производные собственных векторов матрицы, но соглашение о знаках здесь является реальной проблемой, если оно изменяется таким странным образом. Я могу сделать поправку на постоянную фазу, но я даже не уверен, что она здесь делает.

Комментарии:

1. Не публикуйте внешние ссылки на материалы, относящиеся к вопросу.

2. О, хорошо, я просто не знал, как еще передать данные

3. Вставьте его, чтобы мы могли скопировать его в редактор?

4. Там написано слишком много символов

5. Достаточно справедливо. Я думаю, тогда у вас нет особого выбора.