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
| 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) | |
| Конструктор, предварительно выделяет память для динамических матриц. Подробнее... |
|
|
| |
| 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) | |
| Конструктор, предварительно выделяет память для динамических матриц. Подробнее... |
|
|
| |
| 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. |
|
|
| |
| static const int | m_maxIterations |
| Максимальное количество итераций. Подробнее... |
|
GeneralizedSelfAdjointEigenSolver() [1/3]
| inline |
Конструктор по умолчанию для матриц фиксированного размера.
Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнить разложения с помощью compute(). Этот конструктор может быть использован только если _MatrixType является матрицей фиксированного размера; используйте GeneralizedSelfAdjointEigenSolver(Index) для матриц динамического размера.
GeneralizedSelfAdjointEigenSolver() [2/3]
| inlineexplicit |
Конструктор, предварительно выделяет память для матриц динамического размера.
- Parameters
-
[in] size Положительное целое число, размер матрицы, собственные значения и собственные векторы которой будут вычислены.
Этот конструктор полезен для матриц динамического размера, когда пользователь намерен выполнять разложения с помощью compute(). Параметр size используется только в качестве подсказки. Неправильное значение size не является ошибкой, но может повлиять на производительность.
- См. также
- compute() для примера
GeneralizedSelfAdjointEigenSolver() [3/3]
| 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()
| 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
Документация для этого класса сгенерирована из следующего файла:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1GeneralizedSelfAdjointEigenSolver.html