Eigen::GeneralizedEigenSolver
template<typename _MatrixType>
class Eigen::GeneralizedEigenSolver< _MatrixType >
Вычисляет обобщённые собственные значения и собственные векторы пары общих матриц.
Определено в модуле Eigenvalues.
#include <Eigen/Eigenvalues>
- Шаблонные параметры
-
_MatrixType тип матриц, для которых вычисляется собственное разложение; ожидается, что это будет экземпляр шаблона класса Matrix. В настоящее время поддерживаются только вещественные матрицы.
Обобщённые собственные значения и собственные векторы пары матриц \( A \) и \( B \) — это скаляры \( \lambda \) и векторы \( v \) такие, что \( Av = \lambda Bv \). Если \( D \) — диагональная матрица с собственными значениями на диагонали, а \( V \) — матрица с собственными векторами в качестве столбцов, то \( A V = B V D \). Матрица \( V \) почти всегда обратима, в этом случае у нас \( A = B V D V^{-1} \). Это называется обобщённым собственным разложением.
Обобщённые собственные значения и собственные векторы пары матриц могут быть комплексными, даже если матрицы вещественные. Кроме того, обобщённое собственное значение может быть бесконечным, если матрица B вырождена. Для решения этой проблемы собственные значения предоставляются как пара комплексных \( \alpha \) и вещественных \( \beta \) таких, что: \( \lambda_i = \alpha_i / \beta_i \). Если \( \beta_i \) (почти) равно нулю, то можно рассмотреть хорошо определённое левое собственное значение \( \mu = \beta_i / \alpha_i\) такое, что: \( \mu_i A v_i = B v_i \), или даже \( \mu_i u_i^T A = u_i^T B \), где \( u_i \) называется левым собственным вектором.
Вызовите функцию compute(), чтобы вычислить обобщённые собственные значения и собственные векторы заданной пары матриц. В качестве альтернативы можно использовать конструктор GeneralizedEigenSolver(const MatrixType&, const MatrixType&, bool), который вычисляет собственные значения и собственные векторы во время создания. После вычисления собственных значений и собственных векторов их можно получить с помощью функций eigenvalues() и eigenvectors().
Вот пример использования этого класса: Пример:
GeneralizedEigenSolver<MatrixXf> ges; MatrixXf A = MatrixXf::Random(4,4); MatrixXf B = MatrixXf::Random(4,4); ges.compute(A, B); cout << "The (complex) numerators of the generalzied eigenvalues are: " << ges.alphas().transpose() << endl; cout << "The (real) denominatore of the generalzied eigenvalues are: " << ges.betas().transpose() << endl; cout << "The (complex) generalzied eigenvalues are (alphas./beta): " << ges.eigenvalues().transpose() << endl;
Вывод:
The (complex) numerators of the generalzied eigenvalues are: (-0.126,0.569) (-0.126,-0.569) (-0.398,0) (-1.12,0) The (real) denominatore of the generalzied eigenvalues are: -1.56 -1.56 -1.25 0.746 The (complex) generalzied eigenvalues are (alphas./beta): (0.081,-0.365) (0.081,0.365) (0.318,-0) (-1.5,0)
- См. также
- MatrixBase::eigenvalues(), класс ComplexEigenSolver, класс SelfAdjointEigenSolver
| typedef std::complex< RealScalar > | ComplexScalar |
| Тип комплексного скаляра для MatrixType. Подробнее... |
|
| typedef Matrix< ComplexScalar, ColsAtCompileTime, 1, Options &~RowMajor, MaxColsAtCompileTime, 1 > | ComplexVectorType |
| Тип для вектора комплексных скалярных значений собственных значений, возвращаемых функцией alphas(). Подробнее... |
|
| typedef CwiseBinaryOp< internal::scalar_quotient_op< ComplexScalar, Scalar >, ComplexVectorType, VectorType > | EigenvalueType |
| Тип выражения для собственных значений, возвращаемых функцией eigenvalues(). |
|
| typedef Matrix< ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime > | EigenvectorsType |
| Тип матрицы собственных векторов, возвращаемых функцией eigenvectors(). Подробнее... |
|
| typedef Eigen::Index | Index |
| typedef _MatrixType | MatrixType |
Синоним для шаблонового параметра _MatrixType. |
|
| typedef MatrixType::Scalar | Scalar |
| Тип скаляра для матриц типа MatrixType. |
|
| typedef Matrix< Scalar, ColsAtCompileTime, 1, Options &~RowMajor, MaxColsAtCompileTime, 1 > | VectorType |
| Тип для вектора вещественных скалярных значений собственных значений, возвращаемых функцией betas(). Подробнее... |
|
| ComplexVectorType | alphas () const |
| VectorType | betas () const |
| GeneralizedEigenSolver & | compute (const MatrixType &A, const MatrixType &B, bool computeEigenvectors=true) |
| Вычисляет обобщённое разложение собственных значений заданной матрицы. Подробнее... |
|
| EigenvalueType | eigenvalues () const |
| Возвращает выражение вычисленных обобщённых собственных значений. Подробнее... |
|
| GeneralizedEigenSolver () | |
| Конструктор по умолчанию. Подробнее... |
|
| GeneralizedEigenSolver (const MatrixType &A, const MatrixType &B, bool computeEigenvectors=true) | |
| Конструктор; вычисляет обобщённое разложение собственных значений заданной пары матриц. Подробнее... |
|
| GeneralizedEigenSolver (Index size) | |
| Конструктор по умолчанию с предварительной выделением памяти. Подробнее... |
|
| GeneralizedEigenSolver & | setMaxIterations (Index maxIters) |
ComplexScalar
| typedef std::complex<RealScalar> Eigen::GeneralizedEigenSolver< _MatrixType >::ComplexScalar |
Тип комплексного скаляра для MatrixType.
Это std::complex<Scalar> если Scalar вещественное (например, float или double) и просто Scalar если Scalar комплексное.
ComplexVectorType
| typedef Matrix<ComplexScalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> Eigen::GeneralizedEigenSolver< _MatrixType >::ComplexVectorType |
Тип для вектора комплексных скалярных значений собственных значений, возвращаемых alphas().
Это столбец с элементами типа ComplexScalar. Длина вектора равна размеру MatrixType.
EigenvectorsType
| typedef Matrix<ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime> Eigen::GeneralizedEigenSolver< _MatrixType >::EigenvectorsType |
Тип для матрицы собственных векторов, возвращаемых eigenvectors().
Это квадратная матрица с элементами типа ComplexScalar. Размер совпадает с размером MatrixType.
Index
| typedef Eigen::Index Eigen::GeneralizedEigenSolver< _MatrixType >::Index |
- Deprecated:
- с Eigen 3.3
VectorType
| typedef Matrix<Scalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> Eigen::GeneralizedEigenSolver< _MatrixType >::VectorType |
Тип для вектора вещественных скалярных значений собственных значений, возвращаемых betas().
Это столбец с элементами типа Scalar. Длина вектора равна размеру MatrixType.
GeneralizedEigenSolver() [1/3]
| inline |
Конструктор по умолчанию.
Конструктор по умолчанию полезен в тех случаях, когда пользователь намеревается выполнять разложения через EigenSolver::compute(const MatrixType&, bool).
- См. также
- compute() для примера.
GeneralizedEigenSolver() [2/3]
| inlineexplicit |
Конструктор по умолчанию с предварительной выделением памяти.
Подобно конструктору по умолчанию, но с предварительным выделением внутренней памяти в соответствии с указанным размером size.
- См. также
- GeneralizedEigenSolver()
GeneralizedEigenSolver() [3/3]
| inline |
Конструктор; вычисляет обобщённое собственное разложение заданной пары матриц.
- Параметры
-
[вход] A Квадратная матрица, собственное разложение которой требуется вычислить. [вход] B Квадратная матрица, собственное разложение которой требуется вычислить. [вход] computeEigenvectors Если true, вычисляются как собственные векторы, так и собственные значения; если false, вычисляются только собственные значения.
Этот конструктор вызывает compute() для вычисления обобщённых собственных значений и векторов.
- См. также
- compute()
alphas()
| inline |
- Возвращает
- Константную ссылку на векторы, содержащие значения альфа.
Этот вектор позволяет восстановить j-е собственные значения как alphas(i)/betas(j).
- См. также
- betas(), eigenvalues()
betas()
| inline |
- Возвращает
- Константную ссылку на векторы, содержащие значения бета.
Этот вектор позволяет восстановить j-е собственные значения как alphas(i)/betas(j).
- См. также
- alphas(), eigenvalues()
compute()
| GeneralizedEigenSolver< MatrixType > & Eigen::GeneralizedEigenSolver< MatrixType >::compute | ( | const MatrixType & | A, |
| const MatrixType & | B, | ||
| bool |
computeEigenvectors = true | ||
| ) |
Вычисляет обобщённое собственное разложение заданной матрицы.
- Параметры
-
[вход] A Квадратная матрица, собственное разложение которой требуется вычислить. [вход] B Квадратная матрица, собственное разложение которой требуется вычислить. [вход] computeEigenvectors Если true, вычисляются как собственные векторы, так и собственные значения; если false, вычисляются только собственные значения.
- Возвращает
- Ссылка на
*this
Эта функция вычисляет собственные значения вещественной матрицы matrix. Функция eigenvalues() может быть использована для их получения. Если computeEigenvectors является true, то также вычисляются собственные векторы, которые можно получить, вызвав eigenvectors().
Матрица сначала сводится к вещественной обобщённой форме Шур с помощью класса RealQZ. Затем обобщённое разложение Шур используется для вычисления собственных значений и векторов.
Вычислительная стоимость определяется преимущественно стоимостью обобщённого разложения Шур.
Этот метод использует выделенные данные в объекте GeneralizedEigenSolver.
eigenvalues()
| inline |
Возвращает выражение вычисленных обобщённых собственных значений.
- Возвращает
- Выражение столбцового вектора, содержащего собственные значения.
Это сокращение для
this->alphas().cwiseQuotient(this->betas());
Обратите внимание, что betas могут содержать нули. Поэтому не рекомендуется использовать эту функцию, а лучше работать непосредственно с векторами alphas и betas.
- Предварительное условие
- Должны быть вызваны либо конструктор GeneralizedEigenSolver(const MatrixType&,const MatrixType&,bool), либо метод compute(const MatrixType&,const MatrixType&,bool).
Собственные значения повторяются в соответствии с их алгебраической кратностью, поэтому их количество равно числу строк в матрице. Собственные значения не отсортированы.
setMaxIterations()
| inline |
Устанавливает максимальное количество итераций.
The documentation for this class was generated from the following file:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1GeneralizedEigenSolver.html