EigenSolver2Blocked

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

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

bool  matrix::EigenSolver2Blocked(
   matrix&               B,                       // вторая матрица в паре
   ENUM_EIG_VECTORS      jobv,                    // способ вычисления левых и правых векторов
   vectorc&              alpha,                   // вектор рассчитанных собственных значений
   vector&               beta,                    // вектор делителей собственных значений
   matrix&               left_eigenvectors,       // матрица рассчитанных левых векторов
   matrix&               right_eigenvectors       // матрица рассчитанных правых векторов  
   );

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

bool  matrixf::EigenSolver2Blocked(
   matrix&               B,                       // вторая матрица в паре
   ENUM_EIG_VECTORS      jobv,                    // способ вычисления левых и правых векторов
   vectorcf&             alpha,                   // вектор рассчитанных собственных значений
   vectorf&              beta,                    // вектор делителей собственных значений
   matrixf&              left_eigenvectors,       // матрица рассчитанных левых векторов
   matrixf&              right_eigenvectors       // матрица рассчитанных правых векторов  
   );

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

bool  matrix::EigenSolver2Blocked(
   matrixc&              B,                       // вторая матрица в паре
   ENUM_EIG_VECTORS      jobv,                    // способ вычисления левых и правых векторов
   vectorc&              alpha,                   // вектор рассчитанных собственных значений
   vectorc&              beta,                    // вектор делителей собственных значений
   matrixc&              left_eigenvectors,       // матрица рассчитанных левых векторов
   matrixc&              right_eigenvectors       // матрица рассчитанных правых векторов  
   );

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

bool  matrixcf::EigenSolver2(
   matrixcf&             B,                       // вторая матрица в паре
   ENUM_EIG_VECTORS      jobv,                    // способ вычисления левых и правых векторов
   vectorcf&             alpha,                   // вектор рассчитанных собственных значений
   vectorcf&             beta,                    // вектор делителей собственных значений
   matrixcf&             left_eigenvectors,       // матрица рассчитанных левых векторов
   matrixcf&             right_eigenvectors       // матрица рассчитанных правых векторов  
   );

Параметры

B

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

jobv

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

alpha

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

beta

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

left_eigenvectors

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

righeft_eigenvectors

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

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

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

Примечание

Расчёт зависит от значений параметра jobv.

Обобщённое собственное значение для пары матриц (A,B) — это скалярное λ или такое отношение alpha/beta = lambda, при котором A - lambda*B является сингулярным. Обычно представляется в виде пары (alpha,beta), поскольку существует интерпретация для beta=0 и даже для alpha=0 и beta=0.

Правый собственный вектор v(j), соответствующий собственному значению lambda(j) матрицы (A,B), удовлетворяет условию:

A * v(j) = lambda(j) * B * v(j).

Левый собственный вектор u(j), соответствующий собственному значению lambda(j) матрицы (A,B), удовлетворяет условию:

u(j)**H * A  = lambda(j) * u(j)**H * B .

где u(j)**H — сопряженно-транспонированное значение u(j).

Реальные (не комплексные) матрицы могут иметь комплексное решение. Поэтому входной вектор собственных значений должен быть комплексным. В случае комплексного решения код ошибки устанавливается в 4019 (ERR_MATH_OVERFLOW). В противном случае нужно учитывать только реальные части комплексных значений вектора собственных значений.

ENUM_EIG_VECTORS

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

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

Описание

EIGVECTORS_N

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

EIGVECTORS_L

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

EIGVECTORS_R

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

EIGVECTORS_LR

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