EigenSymmetric2Bisect

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

Предполагается, что матрицы A и B симметричны (или эрмитовы), а матрица B также положительно определена. Собственные значения и собственные векторы можно выбрать, указав либо диапазон значений, либо диапазон индексов для желаемых собственных значений. Метод использует алгоритм бисекции (функции LAPACK: SYGVX, HEGVX).

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

bool  matrix::EigenSymmetric2Bisect(
   ENUM_EIGS2_TYPE       itype,              // тип решаемой задачи
   ENUM_EIG_VALUES       jobv,               // необходимость вычисления собственных векторов
   ENUM_BLAS_RANGE       range,              // подмножество вычисляемых собственных значений
   double                lower,              // нижняя граница подмножества
   double                upper,              // верхняя граница подмножества
   double                abstol,             // размер допустимой абсолютной ошибки (absolute error tolerance)
   matrix&               B,                  // вторая матрица
   vector&               eigen_values,       // вектор рассчитанных собственных значений
   matrix&               eigen_vectors,      // матрица рассчитанных собственных векторов
   matrix&               triangular_factor   // треугольный множитель из разложения Холецкого B
   );

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

bool  matrixf::EigenSymmetric2Bisect(
   ENUM_EIGS2_TYPE       itype,              // тип решаемой задачи
   ENUM_EIG_VALUES       jobv,               // необходимость вычисления собственных векторов
   ENUM_BLAS_RANGE       range,              // подмножество вычисляемых собственных значений
   float                 lower,              // нижняя граница подмножества
   float                 upper,              // верхняя граница подмножества
   float                 abstol,             // размер допустимой абсолютной ошибки (absolute error tolerance)
   matrixf&              B,                  // вторая матрица
   vectorf&              eigen_values,       // вектор рассчитанных собственных значений
   matrixf&              eigen_vectors,      // матрица рассчитанных собственных векторов
   matrixf&              triangular_factor   // треугольный множитель из разложения Холецкого B
   );

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

bool  matrixc::EigenSymmetric2Bisect(
   ENUM_EIGS2_TYPE       itype,              // тип решаемой задачи
   ENUM_EIG_VALUES       jobv,               // необходимость вычисления собственных векторов
   ENUM_BLAS_RANGE       range,              // подмножество вычисляемых собственных значений
   double                lower,              // нижняя граница подмножества
   double                upper,              // верхняя граница подмножества
   double                abstol,             // размер допустимой абсолютной ошибки (absolute error tolerance)
   matrixc&              B,                  // вторая матрица
   vector&               eigen_values,       // вектор рассчитанных собственных значений
   matrixc&              eigen_vectors,      // матрица рассчитанных собственных векторов
   matrixc&              triangular_factor   // треугольный множитель из разложения Холецкого B
   );

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

bool  matrixcf::EigenSymmetric2Bisect(
   ENUM_EIGS2_TYPE       itype,              // тип решаемой задачи
   ENUM_EIG_VALUES       jobv,               // необходимость вычисления собственных векторов
   ENUM_BLAS_RANGE       range,              // подмножество вычисляемых собственных значений
   float                 lower,              // нижняя граница подмножества
   float                 upper,              // верхняя граница подмножества
   float                 abstol,             // размер допустимой абсолютной ошибки (absolute error tolerance)
   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, определяющее способ вычисления собственных векторов.

range

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

lower

[in]  Нижняя граница подмножества собственных значений, задается в зависимости от значения параметра range.

upper

[in]  Верхняя граница подмножества собственных значений, задается в зависимости от значения параметра range.

abstol

[in]  Размер абсолютной допустимой ошибки.

Размер абсолютной допустимой ошибки, с которой требуется определить каждое собственное значение/собственный вектор.

Если jobv = 'V', то собственные значения и собственные векторы на выходе имеют нормы невязок, ограниченные значением abstol, и при этом скалярные произведения между различными собственными векторами также ограничены значением abstol.

Если abstol < n *eps*|T|, тогда используется значение n *eps*|T|, где eps — это машинная точность, а |T| — это 1-норма матрицы T. Собственные значения вычисляются с точностью eps*|T| независимо от abstol.

В случае, если важна высокая относительная точность, необходимо установить abstol в безопасное минимальное значение X такое, что 1.0/X не переполняется.

Б

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

eigen_values

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

eigen_vectors

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

triangular_factor

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

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

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

Примечание

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

При значении BLASRANGE_A вычисляются все собственные значения, при этом параметры lower и upper игнорируются.

При значении BLASRANGE_V вычисляются только те собственные значения (и их векторы), которые попадают в диапазон вещественных значений, заданных параметрами lower и upper

При значении BLASRANGE_I вычисляются только те собственные значения (и их векторы), которые попадают в диапазон целочисленных индексов, заданных параметрами lower и upper. Например, при параметрах lower=0 и upper=2 вычисляются только первые три собственные значения.

На вход можно подать симметричную (эрмитову), верхнетреугольную или нижнетреугольную матрицу. Треугольные матрицы подразумеваются симметричными (эрмитово сопряженными). Вторая матрица 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

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

ENUM_BLAS_RANGE

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

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

Описание

BLASRANGE_A

Будут найдены все сингулярные или собственные значения.

BLASRANGE_V

Будут найдены все сингулярные или собственные значения в полуоткрытом интервале (VL,VU].

BLASRANGE_I

Вычисляются особые или собственные значения с IL-го по IU-е.

 

Сайт использует cookie-файлы. Узнайте больше о нашей политике по использованию cookie-файлов.