Упорядочение собственных векторов при расчете собственных векторов с использованием ssteqr LAPACK - PullRequest
2 голосов
/ 29 сентября 2011

Я использую функцию LAPACK ssteqr для вычисления собственных значений / собственных векторов.В документации по ssteqr сказано, что собственные значения отсортированы "в порядке возрастания" .Разумно ли предположить, что список собственных векторов также отсортирован по возрастанию?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Да, разумно предположить, что собственные векторы упорядочены так, что i -ый собственный вектор соответствует i -ому собственному значению.

Тем не менее, на вашем месте я бы проверил для каждого собственного значения результат умножения собственного вектора на матрицу.Таким образом, вы уверены, что вы правильно интерпретируете вывод, и вы четко видите точность вычислений.

0 голосов
/ 22 марта 2018

Старый вопрос, но я недавно с этим боролся, поэтому добавляю это для нынешних и будущих читателей.

Основной ответ заключается в том, что, да, собственные векторы отсортированы так, что 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.

...