Старый вопрос, но я недавно с этим боролся, поэтому добавляю это для нынешних и будущих читателей.
Основной ответ заключается в том, что, да, собственные векторы отсортированы так, что i -ый собственный вектор соответствует i -ому собственному значению. Тем не менее, обратите внимание, что полученные таким образом собственные векторы могут не быть желаемыми действительными действительными *1008*. Это так из-за следующего.
Так как функции? Steqr работают только на трехдиагональных матрицах, обычно используют функции? Sytrd от LAPACK, чтобы сначала преобразовать исходную симметричную матрицу, назовем ее M , в трехдиагональную форму назовем ее T , такой, что M = QTQ T , где Q - ортогональная матрица (и Q T обозначает его транспонирование). Затем к этой трехдиагональной матрице T применяется функция? Steqr, чтобы найти ее собственные значения и собственные векторы. Теперь полученные таким образом собственные значения ( T ) в точности совпадают с собственными значениями M , поэтому, если нужно только собственное значение, можно остановиться здесь. Но если кто-то интересуется собственными векторами, такими как ОП, то следует помнить, что собственные векторы T и M различны. Чтобы найти собственные векторы исходной матрицы M , нужно умножить влево полученные собственные векторы T на Q . Это очень легко сделать с помощью функций LAPACK orgtr или ormtr. Смотрите здесь для ясного объяснения: https://software.intel.com/en-us/mkl-developer-reference-fortran-sytrd.