Spec-Zone.ru › Eigen3

Eigen::GeneralizedSelfAdjointEigenSolver

template<typename _MatrixType>
class Eigen::GeneralizedSelfAdjointEigenSolver< _MatrixType >

Вычисляет собственные значения и собственные векторы обобщенной задачи собственных значений для самосопряженных матриц.

Определено в модуле Eigenvalues.

#include <Eigen/Eigenvalues> 
Параметры шаблона
_MatrixType тип матрицы, для которой вычисляется собственное разложение; ожидается, что это экземпляр шаблона класса Matrix.

Этот класс решает обобщенную задачу собственных значений \( Av = \lambda Bv \). В этом случае матрица \( A \) должна быть самосопряженной, а матрица \( B \) — положительно определенной.

Используется только нижняя треугольная часть входной матрицы.

Вызовите функцию compute(), чтобы вычислить собственные значения и собственные векторы заданной матрицы. В качестве альтернативы, вы можете использовать конструктор GeneralizedSelfAdjointEigenSolver(const MatrixType&, const MatrixType&, int), который вычисляет собственные значения и собственные векторы во время создания. После вычисления собственных значений и собственных векторов их можно получить с помощью функций eigenvalues() и eigenvectors().

Документация для GeneralizedSelfAdjointEigenSolver(const MatrixType&, const MatrixType&, int) содержит пример типичного использования этого класса.

См. также
класс SelfAdjointEigenSolver, класс EigenSolver, класс ComplexEigenSolver
Inheritance graph
GeneralizedSelfAdjointEigenSolver & compute (const MatrixType &matA, const MatrixType &matB, int options=ComputeEigenvectors|Ax_lBx)
Вычисляет обобщенное разложение собственных значений заданной матрицы. Подробнее...
GeneralizedSelfAdjointEigenSolver ()
Конструктор по умолчанию для матриц фиксированного размера. Подробнее...
GeneralizedSelfAdjointEigenSolver (const MatrixType &matA, const MatrixType &matB, int options=ComputeEigenvectors|Ax_lBx)
Конструктор; вычисляет обобщенное разложение собственных значений заданной матрицы. Подробнее...
GeneralizedSelfAdjointEigenSolver (Index size)
Конструктор, предварительно выделяет память для динамических матриц. Подробнее...
- Публичные методы, унаследованные от Eigen::SelfAdjointEigenSolver< _MatrixType >
template<typename InputType >
SelfAdjointEigenSolver & compute (const EigenBase< InputType > &matrix, int options=ComputeEigenvectors)
Вычисляет разложение собственных значений заданной матрицы. Подробнее...
SelfAdjointEigenSolver & computeDirect (const MatrixType &matrix, int options=ComputeEigenvectors)
Вычисляет разложение собственных значений заданной матрицы с помощью замкнутого алгоритма. Подробнее...
SelfAdjointEigenSolver & computeFromTridiagonal (const RealVectorType &diag, const SubDiagonalType &subdiag, int options=ComputeEigenvectors)
Вычисляет разложение собственных значений из трехдиагональной симметричной матрицы. Подробнее...
const RealVectorType & eigenvalues () const
Возвращает собственные значения заданной матрицы. Подробнее...
const EigenvectorsType & eigenvectors () const
Возвращает собственные векторы заданной матрицы. Подробнее...
ComputationInfo info () const
Сообщает, была ли успешна предыдущая вычисления. Подробнее...
MatrixType operatorInverseSqrt () const
Вычисляет обратный квадратный корень матрицы. Подробнее...
MatrixType operatorSqrt () const
Вычисляет положительно определенный квадратный корень матрицы. Подробнее...
SelfAdjointEigenSolver ()
Конструктор по умолчанию для матриц фиксированного размера. Подробнее...
template<typename InputType >
SelfAdjointEigenSolver (const EigenBase< InputType > &matrix, int options=ComputeEigenvectors)
Конструктор; вычисляет разложение собственных значений заданной матрицы. Подробнее...
SelfAdjointEigenSolver (Index size)
Конструктор, предварительно выделяет память для динамических матриц. Подробнее...
- Публичные типы, унаследованные от Eigen::SelfAdjointEigenSolver< _MatrixType >
typedef Eigen::Index Index
typedef NumTraits< Scalar >::Real RealScalar
Тип вещественного скаляра для _MatrixType. Подробнее...
typedef internal::plain_col_type< MatrixType, RealScalar >::type RealVectorType
Тип для вектора собственных значений, возвращаемого методом eigenvalues(). Подробнее...
typedef MatrixType::Scalar Scalar
Тип скаляра для матриц типа _MatrixType.
- Статические публичные атрибуты, унаследованные от Eigen::SelfAdjointEigenSolver< _MatrixType >
static const int m_maxIterations
Максимальное количество итераций. Подробнее...

GeneralizedSelfAdjointEigenSolver() [1/3]

template<typename _MatrixType >
Eigen::GeneralizedSelfAdjointEigenSolver< _MatrixType >::GeneralizedSelfAdjointEigenSolver ( )
inline

Конструктор по умолчанию для матриц фиксированного размера.

Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнить разложения с помощью compute(). Этот конструктор может быть использован только если _MatrixType является матрицей фиксированного размера; используйте GeneralizedSelfAdjointEigenSolver(Index) для матриц динамического размера.

GeneralizedSelfAdjointEigenSolver() [2/3]

template<typename _MatrixType >
Eigen::GeneralizedSelfAdjointEigenSolver< _MatrixType >::GeneralizedSelfAdjointEigenSolver ( Index size )
inlineexplicit

Конструктор, предварительно выделяет память для матриц динамического размера.

Parameters
[in] size Положительное целое число, размер матрицы, собственные значения и собственные векторы которой будут вычислены.

Этот конструктор полезен для матриц динамического размера, когда пользователь намерен выполнять разложения с помощью compute(). Параметр size используется только в качестве подсказки. Неправильное значение size не является ошибкой, но может повлиять на производительность.

См. также
compute() для примера

GeneralizedSelfAdjointEigenSolver() [3/3]

template<typename _MatrixType >
Eigen::GeneralizedSelfAdjointEigenSolver< _MatrixType >::GeneralizedSelfAdjointEigenSolver ( const MatrixType & matA,
const MatrixType & matB,
int options = ComputeEigenvectors|Ax_lBx
)
inline

Конструктор; вычисляет обобщенное собственное разложение заданного матричного пучка.

Parameters
[in] matA Эрмитова матрица в матричном пучке. Используется только нижняя треугольная часть матрицы.
[in] matB Положительно определенная матрица в матричном пучке. Используется только нижняя треугольная часть матрицы.
[in] options Объединение флагов {ComputeEigenvectors,EigenvaluesOnly} | {Ax_lBx,ABx_lx,BAx_lx}. По умолчанию ComputeEigenvectors|Ax_lBx.

Этот конструктор вызывает compute(const MatrixType&, const MatrixType&, int) для вычисления собственных значений и (если запрошено) собственных векторов обобщённой задачи на собственные значения \( Ax = \lambda B x \) с matA — эрмитовой матрицей \( A \) и matB — положительно определённой матрицей \( B \). Каждый собственный вектор \( x \) удовлетворяет свойству \( x^* B x = 1 \). Собственные векторы вычисляются, если options содержит ComputeEigenvectors.

Кроме того, два следующих варианта могут быть решены с помощью options:

  • ABx_lx: \( ABx = \lambda x \)
  • BAx_lx: \( BAx = \lambda x \)

Пример:

MatrixXd X = MatrixXd::Random(5,5);
MatrixXd A = X + X.transpose();
cout << "Here is a random symmetric matrix, A:" << endl << A << endl;
X = MatrixXd::Random(5,5);
MatrixXd B = X * X.transpose();
cout << "and a random postive-definite matrix, B:" << endl << B << endl << endl;
 
GeneralizedSelfAdjointEigenSolver<MatrixXd> es(A,B);
cout << "The eigenvalues of the pencil (A,B) are:" << endl << es.eigenvalues() << endl;
cout << "The matrix of eigenvectors, V, is:" << endl << es.eigenvectors() << endl << endl;
 
double lambda = es.eigenvalues()[0];
cout << "Consider the first eigenvalue, lambda = " << lambda << endl;
VectorXd v = es.eigenvectors().col(0);
cout << "If v is the corresponding eigenvector, then A * v = " << endl << A * v << endl;
cout << "... and lambda * B * v = " << endl << lambda * B * v << endl << endl;

Вывод:

Here is a random symmetric matrix, A:
  1.36 -0.816  0.521   1.43 -0.144
-0.816 -0.659  0.794 -0.173 -0.406
 0.521  0.794 -0.541  0.461  0.179
  1.43 -0.173  0.461  -1.43  0.822
-0.144 -0.406  0.179  0.822  -1.37
and a random postive-definite matrix, B:
  0.132  0.0109 -0.0512  0.0674  -0.143
 0.0109    1.68    1.13   -1.12   0.916
-0.0512    1.13     2.3   -2.14    1.86
 0.0674   -1.12   -2.14    2.69   -2.01
 -0.143   0.916    1.86   -2.01    1.68

The eigenvalues of the pencil (A,B) are:
  -227
  -3.9
-0.837
 0.101
  54.2
The matrix of eigenvectors, V, is:
   14.2   -1.03  0.0766 -0.0273   -8.36
 0.0546  -0.115   0.729   0.478   0.374
  -9.23   0.624 -0.0165   0.499    3.01
   7.88     1.3   0.225   0.109   -3.85
   20.8   0.805  -0.567 -0.0828   -8.73

Consider the first eigenvalue, lambda = -227
If v is the corresponding eigenvector, then A * v = 
 22.8
-28.8
 19.8
 21.9
-25.9
... and lambda * B * v = 
 22.8
-28.8
 19.8
 21.9
-25.9

См. также
compute(const MatrixType&, const MatrixType&, int)

compute()

template<typename MatrixType >
GeneralizedSelfAdjointEigenSolver< MatrixType > & Eigen::GeneralizedSelfAdjointEigenSolver< MatrixType >::compute ( const MatrixType & matA,
const MatrixType & matB,
int options = ComputeEigenvectors|Ax_lBx
)

Вычисляет обобщённое собственное разложение заданного матричного пучка.

Parameters
[in] matA Эрмитова матрица в матричном пучке. Используется только нижняя треугольная часть матрицы.
[in] matB Положительно определённая матрица в матричном пучке. Используется только нижняя треугольная часть матрицы.
[in] options Объединение флагов {ComputeEigenvectors,EigenvaluesOnly} | {Ax_lBx,ABx_lx,BAx_lx}. По умолчанию ComputeEigenvectors|Ax_lBx.
Возвращает
Ссылка на *this

Согласно options, эта функция вычисляет собственные значения и (если запрошено) собственные векторы одной из следующих трёх обобщенных задач на собственные значения:

  • Ax_lBx: \( Ax = \lambda B x \)
  • ABx_lx: \( ABx = \lambda x \)
  • BAx_lx: \( BAx = \lambda x \) с matA — эрмитовой матрицей \( A \) и matB — положительно определённой матрицей \( B \). Кроме того, каждый собственный вектор \( x \) удовлетворяет свойству \( x^* B x = 1 \).

Функция eigenvalues() может быть использована для получения собственных значений. Если options содержит ComputeEigenvectors, то собственные векторы также вычисляются и могут быть получены вызовом eigenvectors().

Реализация использует LLT для вычисления разложения Холецкого \( B = LL^* \) и вычисляет классическое собственное разложение эрмитовой матрицы \( L^{-1} A (L^*)^{-1} \) если options содержит Ax_lBx и \( L^{*} A L \) в противном случае. Это решает обобщенную задачу на собственные значения, потому что любое решение обобщенной задачи на собственные значения \( Ax = \lambda B x \) соответствует решению \( L^{-1} A (L^*)^{-1} (L^* x) = \lambda (L^* x) \) задачи на собственные значения для \( L^{-1} A (L^*)^{-1} \). Аналогичные утверждения могут быть сделаны для двух других вариантов.

Пример:

MatrixXd X = MatrixXd::Random(5,5);
MatrixXd A = X * X.transpose();
X = MatrixXd::Random(5,5);
MatrixXd B = X * X.transpose();
 
GeneralizedSelfAdjointEigenSolver<MatrixXd> es(A,B,EigenvaluesOnly);
cout << "The eigenvalues of the pencil (A,B) are:" << endl << es.eigenvalues() << endl;
es.compute(B,A,false);
cout << "The eigenvalues of the pencil (B,A) are:" << endl << es.eigenvalues() << endl;

Вывод:

The eigenvalues of the pencil (A,B) are:
  0.0289
   0.299
    2.11
    8.64
2.08e+03
The eigenvalues of the pencil (B,A) are:
0.000481
   0.116
   0.473
    3.34
    34.6
См. также
GeneralizedSelfAdjointEigenSolver(const MatrixType&, const MatrixType&, int)

Документация для этого класса сгенерирована из следующего файла:
  • GeneralizedSelfAdjointEigenSolver.h

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1GeneralizedSelfAdjointEigenSolver.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API