EigenVectorsBackward

Формирует правые или левые собственные векторы вещественной или комплексной общей матрицы с помощью обратного преобразования, примененного к собственным векторам сбалансированной матрицы, полученной функцией MatrixBalance. Функция LAPACK GEBAK.

Вычисления для типа matrix<double>

bool  matrix::EigenVectorsBackward(
   ENUM_EIG_BALANCE      job,                     // метод балансирования матрицы
   ENUM_EIG_SIDE         side,                    // правые или левые собственные векторы
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   vector&               scale,                   // подробности перестановок и масштабирования при балансировке входной матрицы
   matrix&                                      // собственные векторы
   );

Вычисления для типа matrix<float>

bool  matrixf::EigenVectorsBackward(
   ENUM_EIG_BALANCE      job,                     // метод балансировки входной матрицы
   ENUM_EIG_SIDE         side,                    // правые или левые собственные векторы
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   vectorf&              scale,                   // подробности перестановок и масштабирования при балансировке входной матрицы
   matrixf&                                     // собственные векторы
   );

Вычисления для типа matrix<complex>

bool  matrixc::EigenVectorsBackward(
   ENUM_EIG_BALANCE      job,                     // метод балансировки входной матрицы
   ENUM_EIG_SIDE         side,                    // правые или левые собственные векторы
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   vector&               scale,                   // подробности перестановок и масштабирования при балансировке входной матрицы
   matrixc&                                     // собственные векторы
   );

Вычисления для типа matrix<complexf>

bool  matrixcf::EigenVectorsBackward(
   ENUM_EIG_BALANCE      job,                     // метод балансировки входной матрицы
   ENUM_EIG_SIDE         side,                    // правые или левые собственные векторы
   long                  ilo,                     // индекс нижней границы сбалансированной матрицы
   long                  ihi,                     // индекс верхней границы сбалансированной матрицы
   vectorf&              scale,                   // подробности перестановок и масштабирования при балансировке входной матрицы
   matrixcf&                                    // собственные векторы
   );

Параметры

job

[in]  Значение из перечисления ENUM_EIG_BALANCE, которое определяет необходимость и способ балансировки входной матрицы.

side

[in]  Значение из перечисления ENUM_EIG_SIDE, определяющее, какие векторы вычислять — левые или правые.

ilo

[in]  Индекс нижней границы сбалансированной матрицы. Значение, возвращаемое методом MatrixBalance.

ihi

[in]  Индекс верхней границы сбалансированной матрицы. Значение, возвращаемое методом MatrixBalance.

scale

[in]  Вектор подробностей перестановок и масштабирования при балансировке входной матрицы. Значение, возвращаемое методом MatrixBalance.

V

[out]  Правые или левые собственные векторы, обратно преобразованные из входных собственных векторов.

Возвращаемое значение

Возвращает true в случае успеха, иначе false в случае ошибки.

Примечание

   При вычислении собственных значений и векторов часто применяется балансировка матрицы (масштабирование строк и столбцов) для улучшения численной устойчивости.

   Эта балансировка производится функцией GEBAL, которая преобразует матрицу в "более приятную" форму.

   После балансировки и вычисления собственных векторов новой матрицы результат не соответствует исходной матрице.

   Тогда вызывается GEBAK, чтобы перенести собственные векторы обратно в пространство исходной (небалансированной) матрицы.

Метод применяется к матрице правых или левых собственных векторов сбалансированной матрицы. Такие собственные векторы могут быть получены с помощью любого подходящего метода решения задачи на собственные значения (eigen solver).

ENUM_EIG_BALANCE

Перечисление, определяющее необходимость вычисления собственных векторов.

Идентификатор

Описание

EIGBALANCE_N

Не проводится диагональное масштабирование и перестановка.

EIGBALANCE_P

Выполняются перестановки, чтобы привести матрицу к почти верхнетреугольному виду. Не выполняется диагональное масштабирование

EIGBALANCE_S

Выполняется диагональное масштабирование матрицы. Перестановка не проводится

EIGBALANCE_B      

Выполняется и диагональное масштабирование, и перестановка.

ENUM_EIG_SIDE

Перечисление, определяющее необходимость вычисления правых или левых собственных векторов.

Идентификатор

Описание

EIGSIDE_R

'R' — правые собственные векторы

EIGSIDE_L

'L' — левые собственные векторы