EigenSymmetric2DC

Вычисление всех собственных значений и, при необходимости, собственных векторов для обобщенной симметричной задачи на собственные значения: A*x=(lambda)*B*x,  A*Bx=(lambda)*x,  or B*A*x=(lambda)*x.

Здесь предполагается, что матрицы A и B — симметричные (или эрмитовы), а также что матрица B положительно определенаа. Если требуется вычисление собственные векторы, применяется алгоритм divide and conquer («разделяй и властвуй») (функции LAPACK SYGVD и HEGVD).

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

bool  matrix::EigenSymmetric2DC(
   ENUM_EIGS2_TYPE       itype,              // тип задачи
   ENUM_EIG_VALUES       jobv,               // нужно ли вычислять собственные векторы
   matrix&               B,                  // вторая матрица
   vector&               eigen_values,       // вектор собственных значений
   matrix&               eigen_vectors,      // матрица собственных векторов
   matrix&               triangular_factor   // треугольный множитель из разложения Холецкого для B
   );

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

bool  matrixf::EigenSymmetric2DC(
   ENUM_EIGS2_TYPE       itype,              // тип задачи
   ENUM_EIG_VALUES       jobv,               // нужно ли вычислять собственные векторы
   matrixf&              B,                  // вторая матрица
   vectorf&              eigen_values,       // вектор собственных значений
   matrixf&              eigen_vectors,      // матрица собственных векторов
   matrixf&              triangular_factor   // треугольный множитель из разложения Холецкого для B
   );

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

bool  matrixc::EigenSymmetric2DC(
   ENUM_EIGS2_TYPE       itype,              // тип задачи
   ENUM_EIG_VALUES       jobv,               // нужно ли вычислять собственные векторы
   matrixc&              B,                  // вторая матрица
   vector&               eigen_values,       // вектор собственных значений
   matrixc&              eigen_vectors,      // матрица собственных векторов
   matrixc&              triangular_factor   // треугольный множитель из разложения Холецкого для B
   );

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

bool  matrixcf::EigenSymmetric2DC(
   ENUM_EIGS2_TYPE       itype,              // тип задачи
   ENUM_EIG_VALUES       jobv,               // нужно ли вычислять собственные векторы
   matrixcf&             B,                  // вторая матрица
   vectorf&              eigen_values,       // вектор собственных значений
   matrixcf&             eigen_vectors,      // матрица собственных векторов
   matrixcf&             triangular_factor   // треугольный множитель из разложения Холецкого для B
   );

Параметры

itype

[in]  Значение перечисления ENUM_EIGS2_TYPE, определяющее тип задачи: A*x=(lambda)*B*x,  A*Bx=(lambda)*x  или B*A*x=(lambda)*x.

jobv

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

B

[in]  Вторая матрица B. Должна быть положительно определенной симметричной (или эрмитово сопряженной) матрицей.

eigen_values

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

eigen_vectors

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

triangular_factor

[out] Треугольный множитель (верхний или нижний) из разложения Холецкого B = U**T*U или B = L*L**T.

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

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

Примечание

На вход можно подать симметричную (эрмитову), верхнетреугольную или нижнетреугольную матрицу. Треугольные матрицы подразумеваются симметричными (эрмитово-сопряжёнными). Вторая матрица B должна быть положительно определенной симметричной. Если входная матрица и вторая матрица B треугольные, то обе они должны быть одинаковой треугольной формы — верхней или нижней.

ENUM_EIGS2_TYPE

Перечисление, которое определяет тип задачи.

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

Описание

EIGS2TYPE_1

1:  A*x = (lambda)*B*x

EIGS2TYPE_2

2:  A*B*x = (lambda)*x

EIGS2TYPE_3

3:  B*A*x = (lambda)*x

ENUM_EIG_VALUES

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

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

Описание

EIGVALUES_V

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

EIGVALUES_N

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