Spec-Zone.ru › Eigen3

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

template<typename _MatrixType >
typedef std::complex<RealScalar> Eigen::GeneralizedEigenSolver< _MatrixType >::ComplexScalar

Тип комплексного скаляра для MatrixType.

Это std::complex<Scalar> если Scalar вещественное (например, float или double) и просто Scalar если Scalar комплексное.

ComplexVectorType

template<typename _MatrixType >
typedef Matrix<ComplexScalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> Eigen::GeneralizedEigenSolver< _MatrixType >::ComplexVectorType

Тип для вектора комплексных скалярных значений собственных значений, возвращаемых alphas().

Это столбец с элементами типа ComplexScalar. Длина вектора равна размеру MatrixType.

EigenvectorsType

template<typename _MatrixType >
typedef Matrix<ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime> Eigen::GeneralizedEigenSolver< _MatrixType >::EigenvectorsType

Тип для матрицы собственных векторов, возвращаемых eigenvectors().

Это квадратная матрица с элементами типа ComplexScalar. Размер совпадает с размером MatrixType.

Index

template<typename _MatrixType >
typedef Eigen::Index Eigen::GeneralizedEigenSolver< _MatrixType >::Index
Deprecated:
с Eigen 3.3

VectorType

template<typename _MatrixType >
typedef Matrix<Scalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> Eigen::GeneralizedEigenSolver< _MatrixType >::VectorType

Тип для вектора вещественных скалярных значений собственных значений, возвращаемых betas().

Это столбец с элементами типа Scalar. Длина вектора равна размеру MatrixType.

GeneralizedEigenSolver() [1/3]

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

Конструктор по умолчанию.

Конструктор по умолчанию полезен в тех случаях, когда пользователь намеревается выполнять разложения через EigenSolver::compute(const MatrixType&, bool).

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

GeneralizedEigenSolver() [2/3]

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

Конструктор по умолчанию с предварительной выделением памяти.

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

См. также
GeneralizedEigenSolver()

GeneralizedEigenSolver() [3/3]

template<typename _MatrixType >
Eigen::GeneralizedEigenSolver< _MatrixType >::GeneralizedEigenSolver ( const MatrixType & A,
const MatrixType & B,
bool computeEigenvectors = true
)
inline

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

Параметры
[вход] A Квадратная матрица, собственное разложение которой требуется вычислить.
[вход] B Квадратная матрица, собственное разложение которой требуется вычислить.
[вход] computeEigenvectors Если true, вычисляются как собственные векторы, так и собственные значения; если false, вычисляются только собственные значения.

Этот конструктор вызывает compute() для вычисления обобщённых собственных значений и векторов.

См. также
compute()

alphas()

template<typename _MatrixType >
ComplexVectorType Eigen::GeneralizedEigenSolver< _MatrixType >::alphas ( ) const
inline
Возвращает
Константную ссылку на векторы, содержащие значения альфа.

Этот вектор позволяет восстановить j-е собственные значения как alphas(i)/betas(j).

См. также
betas(), eigenvalues()

betas()

template<typename _MatrixType >
VectorType Eigen::GeneralizedEigenSolver< _MatrixType >::betas ( ) const
inline
Возвращает
Константную ссылку на векторы, содержащие значения бета.

Этот вектор позволяет восстановить j-е собственные значения как alphas(i)/betas(j).

См. также
alphas(), eigenvalues()

compute()

template<typename MatrixType >
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()

template<typename _MatrixType >
EigenvalueType Eigen::GeneralizedEigenSolver< _MatrixType >::eigenvalues ( ) const
inline

Возвращает выражение вычисленных обобщённых собственных значений.

Возвращает
Выражение столбцового вектора, содержащего собственные значения.

Это сокращение для

this->alphas().cwiseQuotient(this->betas()); 

Обратите внимание, что betas могут содержать нули. Поэтому не рекомендуется использовать эту функцию, а лучше работать непосредственно с векторами alphas и betas.

Предварительное условие
Должны быть вызваны либо конструктор GeneralizedEigenSolver(const MatrixType&,const MatrixType&,bool), либо метод compute(const MatrixType&,const MatrixType&,bool).

Собственные значения повторяются в соответствии с их алгебраической кратностью, поэтому их количество равно числу строк в матрице. Собственные значения не отсортированы.

См. также
alphas(), betas(), eigenvectors()

setMaxIterations()

template<typename _MatrixType >
GeneralizedEigenSolver& Eigen::GeneralizedEigenSolver< _MatrixType >::setMaxIterations ( Index maxIters )
inline

Устанавливает максимальное количество итераций.


The documentation for this class was generated from the following file:
  • GeneralizedEigenSolver.h

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

Spec-Zone.ru

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