EigenSolver2X

Вычисление обобщённых собственных значений и собственных векторов для пары обычных квадратных матриц в режиме эксперта (Expert mode), то есть с возможностью влиять на алгоритм расчёта и возможностью получить сопутствующие расчётные данные (lapack-функция GGEVX). Обе матрицы должны быть одинакового размера.

Также может вычислять балансировочное преобразование для улучшения обусловленности собственных значений и векторов (ILO, IHI, LSCALE, RSCALE, ABNRM и BBNRM), обратных чисел обусловленности для собственных значений (RCONDE) и обратных чисел обусловленности для правых собственных векторов (RCONDV).

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

bool  matrix::EigenSolver2X(
   matrix&               B,                       // вторая матрица в паре
   ENUM_EIG_BALANCE      balance,                 // способ балансировки входной матрицы
   ENUM_EIG_VECTORS      jobv,                    // необходимость вычисления левых и правых собственных векторов
   ENUM_EIG_SENSE        sense,                   // необходимость вычисления обратных чисел обусловленности (reciprocal condition numbers)
   vectorc&              alpha,                   // вектор рассчитанных собственных значений
   vector&               beta,                    // вектор делителей собственных значений
   matrix&               left_eigenvectors,       // матрица рассчитанных левых векторов
   matrix&               right_eigenvectors       // матрица рассчитанных правых векторов  
   matrix&               shur_matrix1,            // первая часть вещественной формы Шура "сбалансированных" версий входных A и B
   matrix&               shur_matrix2,            // вторая часть вещественной формы Шура "сбалансированных" версий входных A и B
   long&                 ilo,                     // нижний индекс сбалансированной матрицы
   long&                 ihi,                     // верхний индекс сбалансированной матрицы
   vector&               lscale,                  // детали перестановок и масштабирования, применяемых к левой стороне A и B
   vector&               rscale,                  // детали перестановок и масштабирования, применяемых к правой стороне A и B
   double&               ab_norm,                 // 1-норма сбалансированной входной матрицы
   double&               bb_norm,                 // 1-норма сбалансированной второй матрицы B
   vector&               rconde,                  // вектор обратных чисел обусловленности для каждого собственного значения
   vector&               rcondv                   // вектор обратных чисел обусловленности для каждого правого собственного вектора
   );

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

bool  matrixf::EigenSolver2X(
   matrixf&              B,                       // вторая матрица в паре
   ENUM_EIG_BALANCE      balance,                 // способ балансировки входной матрицы
   ENUM_EIG_VECTORS      jobv,                    // необходимость вычисления левых и правых собственных векторов
   ENUM_EIG_SENSE        sense,                   // необходимость вычисления обратных чисел обусловленности (reciprocal condition numbers)
   vectorcf&             alpha,                   // вектор рассчитанных собственных значений
   vectorf&              beta,                    // вектор делителей собственных значений
   matrixf&              left_eigenvectors,       // матрица рассчитанных левых векторов
   matrixf&              right_eigenvectors       // матрица рассчитанных правых векторов  
   matrixf&              shur_matrix1,            // первая часть вещественной формы Шура "сбалансированных" версий входных A и B
   matrixf&              shur_matrix2,            // вторая часть вещественной формы Шура "сбалансированных" версий входных A и B
   long&                 ilo,                     // нижний индекс сбалансированной матрицы
   long&                 ihi,                     // верхний индекс сбалансированной матрицы
   vectorf&              lscale,                  // детали перестановок и масштабирования, применяемых к левой стороне A и B
   vectorf&              rscale,                  // детали перестановок и масштабирования, применяемых к правой стороне A и B
   float&                ab_norm,                 // 1-норма сбалансированной входной матрицы
   float&                bb_norm,                 // 1-норма сбалансированной второй матрицы B
   vectorf&              rconde,                  // вектор обратных чисел обусловленности для каждого собственного значения
   vectorf&              rcondv                   // вектор обратных чисел обусловленности для каждого правого собственного вектора
   );

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

bool  matrixc::EigenSolver2X(
   matrixc&              B,                       // вторая матрица в паре
   ENUM_EIG_BALANCE      balance,                 // способ балансировки входной матрицы
   ENUM_EIG_VECTORS      jobv,                    // необходимость вычисления левых и правых собственных векторов
   ENUM_EIG_SENSE        sense,                   // необходимость вычисления обратных чисел обусловленности (reciprocal condition numbers)
   vectorc&              alpha,                   // вектор рассчитанных собственных значений
   vectorc&              beta,                    // вектор делителей собственных значений
   matrixc&              left_eigenvectors,       // матрица рассчитанных левых векторов
   matrixc&              right_eigenvectors       // матрица рассчитанных правых векторов  
   matrixc&              shur_matrix1,            // первая часть вещественной формы Шура "сбалансированных" версий входных A и B
   matrixc&              shur_matrix2,            // вторая часть вещественной формы Шура "сбалансированных" версий входных A и B
   long&                 ilo,                     // нижний индекс сбалансированной матрицы
   long&                 ihi,                     // верхний индекс сбалансированной матрицы
   vector&               lscale,                  // детали перестановок и масштабирования, применяемых к левой стороне A и B
   vector&               rscale,                  // детали перестановок и масштабирования, применяемых к правой стороне A и B
   double&               ab_norm,                 // 1-норма сбалансированной входной матрицы
   double&               bb_norm,                 // 1-норма сбалансированной второй матрицы B
   vector&               rconde,                  // вектор обратных чисел обусловленности для каждого собственного значения
   vector&               rcondv                   // вектор обратных чисел обусловленности для каждого правого собственного вектора 
   );

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

bool  matrixcf::EigenSolver2X(
   matrixcf&             B,                       // вторая матрица в паре
   ENUM_EIG_BALANCE      balance,                 // способ балансировки входной матрицы
   ENUM_EIG_VECTORS      jobv,                    // необходимость вычисления левых и правых собственных векторов
   ENUM_EIG_SENSE        sense,                   // необходимость вычисления обратных чисел обусловленности (reciprocal condition numbers)
   vectorcf&             alpha,                   // вектор рассчитанных собственных значений
   vectorf&              beta,                    // вектор делителей собственных значений
   matrixcf&             left_eigenvectors,       // матрица рассчитанных левых векторов
   matrixcf&             right_eigenvectors       // матрица рассчитанных правых векторов  
   matrixcf&             shur_matrix1,            // первая часть вещественной формы Шура "сбалансированных" версий входных A и B
   matrixcf&             shur_matrix2,            // вторая часть вещественной формы Шура "сбалансированных" версий входных A и B
   long&                 ilo,                     // нижний индекс сбалансированной матрицы
   long&                 ihi,                     // верхний индекс сбалансированной матрицы
   vectorf&              lscale,                  // детали перестановок и масштабирования, применяемых к левой стороне A и B
   vectorf&              rscale,                  // детали перестановок и масштабирования, применяемых к правой стороне A и B
   float&                ab_norm,                 // 1-норма сбалансированной входной матрицы
   float&                bb_norm,                 // 1-норма сбалансированной второй матрицы B
   vectorf&              rconde,                  // вектор обратных чисел обусловленности для каждого собственного значения
   vectorf&              rcondv                   // вектор обратных чисел обусловленности для каждого правого собственного вектора 
   );

Параметры

B

[in]  Вторая матрица в паре.

balance

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

jobv

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

sense

[in]  Значение из перечисления ENUM_EIG_SENSE, определяющее необходимость вычисления обратных чисел обусловленности.

eigen_values

[out] Вектор собственных значений.

left_eigenvectors

[out] Матрица левых собственных векторов.

right_eigenvectors

[out] Матрица правых собственных векторов.

shur_matrix1, shur_matrix2

[out]  2 части сбалансированной матрицы в форме Шура; не заполняется, если не рассчитываются ни левые, ни правые собственные векторы.

ilo

[out]  Нижний индекс сбалансированной матрицы; не заполняется, если балансировка не применяется.

ihi

[out]  Верхний индекс сбалансированной матрицы; не заполняется, если балансировка не применяется.

lscale

[out]  Вектор содержит детали перестановок и масштабирования, применяемых к левой стороне A и B.

Если PL(j) — это индекс строки, меняемой местами со строкой j, а DL(j) — это коэффициент масштабирования, примененный к строке j, тогда

lscale(j) = PL(j), для j = 1,..., ilo-1

= DL(j), для j = ilo,...,ihi

= PL(j) для j = ihi+1,..., n.

Порядок, в котором выполняются перестановки: сначала n в ihi+1, затем 1 в ilo-1.

rscale

[out]  Вектор содержит детали перестановок и масштабирования, применяемых к правой стороне A и B.

Если PR(j) — это индекс столбца, меняемого местами со столбцом j, а DR(j) —  это коэффициент масштабирования, примененный к столбцу j, тогда

rscale(j) = PR(j), для j = 1,..., ilo-1

= DR(j), для j = ilo,...,ihi

= PR(j) для j = ihi+1,..., n.

Порядок, в котором выполняются перестановки: сначала n в ihi+1, затем 1 в ilo-1.

ab_norm

[out]  1-норма сбалансированной входной матрицы (максимум из сумм абсолютных значений элементов любой из колонок матрицы).

bb_norm

[out]  1-норма сбалансированной второй матрицы B.

rconde

[out]  Вектор обратных чисел обусловленности для каждого собственного значения; рассчитывается если значение параметра sense равно 'E' или 'B'.

rcondv

[out]  Вектор обратных чисел обусловленности для каждого правого собственного вектора; рассчитывается если значение параметра sense равно 'V' или 'B.

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

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

Примечание

Балансировка входных матриц зависит от значения параметра balance.

ENUM_EIG_BALANCE

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

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

Описание

EIGBALANCE_N

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

EIGBALANCE_P

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

EIGBALANCE_S

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

EIGBALANCE_B      

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

ENUM_EIG_VECTORS

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

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

Описание

EIGVECTORS_N

Вычисляются только собственные значения, без векторов.

EIGVECTORS_L

Вычисляются только левые собственные векторы.

EIGVECTORS_R

Вычисляются только правые собственные векторы.

EIGVECTORS_LR

Вычисляются левые и правые собственные векторы, собственные значения вычисляются всегда.

 

ENUM_EIG_SENSE

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

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

Описание

EIGSENSE_N

Не вычисляется ни одно из обратных чисел обусловленности.

EIGSENSE_E

Вычисляются только для собственных значений.

EIGSENSE_V

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

EIGSENSE_B      

Вычисляется и для собственных значений, и для правых собственных векторов.