EigenSymmetric2DC

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

Предполагается, что матрицы A и B симметричны (или эрмитовы), а матрица B также положительно определена. Если требуется вычисление собственные векторы, применяется алгоритм "разделяй и властвуй" (функции 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 или or B*A*x=(lambda)*x.

jobv

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

Б

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

eigen_values

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

eigen_vectors

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

triangular_factor

[out] Треугольный множитель U или L из разложения Холецкого = 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

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