EigenSymmetricRobust2s

Вычисление собственных значений и собственных векторов симметричной или эрмитовой (комплексно-сопряжённой) матрицы при помощи двухэтапного алгоритма: сначала приведение к тридиагональному виду, затем применение алгоритма множественных относительно надежных представлений (Multiple Relatively Robust Representations, MRRR) (функции lapack SYEVR_2STAGE, HEEVR_2STAGE).

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

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

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

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

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

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

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

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

Параметры

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 не переполняется.

eigen_values

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

eigen_vectors

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

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

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

Примечание

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

При значении jobv = EIGVALUES_V рассчитываются собственные векторы и собственные значения. В текущей реализации OpenBLAS использование этого значения недоступно. В случае его использования будет возвращена ошибка 4003 (ERR_INVALID_PARAMETER).

При значении EIGVALUES_N собственные векторы не рассчитываются. Рассчитываются только собственные значения.

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

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

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

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

ENUM_EIG_VALUES

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

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

Описание

EIGVALUES_V

Вычисляются собственные векторы и собственные значения. Недоступно в этой версии.

EIGVALUES_N

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

ENUM_BLAS_RANGE

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

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

Описание

BLASRANGE_A

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

BLASRANGE_V

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

BLASRANGE_I

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