Spec-Zone.ru › Eigen3

Eigen::ComplexEigenSolver

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

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

Определено в модуле собственных значений.

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

Собственные значения и собственные векторы матрицы \( A \) — это скаляры \( \lambda \) и векторы \( v \) такие, что \( Av = \lambda v \). Если \( D \) — диагональная матрица с собственными значениями на диагонали, а \( V \) — матрица, столбцами которой являются собственные векторы, то \( A V = V D \). Матрица \( V \) почти всегда обратима, в этом случае у нас есть \( A = V D V^{-1} \). Это называется собственным разложением.

Основной функцией в этом классе является compute(), которая вычисляет собственные значения и собственные векторы заданной функции. Документация этой функции содержит пример, демонстрирующий основные возможности класса.

См. также
класс EigenSolver, класс SelfAdjointEigenSolver
typedef std::complex< RealScalar > ComplexScalar
Тип комплексного скаляра для MatrixType. Подробнее...
typedef Matrix< ComplexScalar, ColsAtCompileTime, 1, Options &(~RowMajor), MaxColsAtCompileTime, 1 > EigenvalueType
Тип для вектора собственных значений, возвращаемого методом eigenvalues(). Подробнее...
typedef Matrix< ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime > EigenvectorType
Тип для матрицы собственных векторов, возвращаемой методом eigenvectors(). Подробнее...
typedef Eigen::Index Index
typedef _MatrixType MatrixType
Синоним для параметра шаблона _MatrixType.
typedef MatrixType::Scalar Scalar
Тип скаляра для матриц типа MatrixType.
ComplexEigenSolver ()
Конструктор по умолчанию. Подробнее...
template<typename InputType >
ComplexEigenSolver (const EigenBase< InputType > &matrix, bool computeEigenvectors=true)
Конструктор; вычисляет собственное разложение заданной матрицы. Подробнее...
ComplexEigenSolver (Index size)
Конструктор по умолчанию с предварительной выделением памяти. Подробнее...
template<typename InputType >
ComplexEigenSolver & compute (const EigenBase< InputType > &matrix, bool computeEigenvectors=true)
Вычисляет собственное разложение заданной матрицы. Подробнее...
const EigenvalueType & eigenvalues () const
Возвращает собственные значения заданной матрицы. Подробнее...
const EigenvectorType & eigenvectors () const
Возвращает собственные векторы заданной матрицы. Подробнее...
Index getMaxIterations ()
Возвращает максимальное число итераций.
ComputationInfo info () const
Отчет о том, был ли успешным предыдущий расчет. Подробнее...
ComplexEigenSolver & setMaxIterations (Index maxIters)
Устанавливает максимальное число разрешенных итераций.

ComplexScalar

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

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

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

EigenvalueType

template<typename _MatrixType >
typedef Matrix<ComplexScalar, ColsAtCompileTime, 1, Options&(~RowMajor), MaxColsAtCompileTime, 1> Eigen::ComplexEigenSolver< _MatrixType >::EigenvalueType

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

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

EigenvectorType

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

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

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

Индекс

template<typename _MatrixType >
typedef Eigen::Index Eigen::ComplexEigenSolver< _MatrixType >::Index
Устаревшее:
с Eigen 3.3

ComplexEigenSolver() [1/3]

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

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

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

ComplexEigenSolver() [2/3]

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

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

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

См. также
ComplexEigenSolver()

ComplexEigenSolver() [3/3]

template<typename _MatrixType >
template<typename InputType >
Eigen::ComplexEigenSolver< _MatrixType >::ComplexEigenSolver ( const EigenBase< InputType > & matrix,
bool computeEigenvectors = true
)
inlineexplicit

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

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

Этот конструктор вызывает compute() для вычисления собственного разложения.

compute()

template<typename _MatrixType >
template<typename InputType >
ComplexEigenSolver& Eigen::ComplexEigenSolver< _MatrixType >::compute ( const EigenBase< InputType > & matrix,
bool computeEigenvectors = true
)

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

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

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

Матрица сначала сводится к форме Шурра с помощью класса ComplexSchur. Затем разложение Шурра используется для вычисления собственных значений и собственных векторов.

Вычисления доминируют по стоимости операцией сведения к форме Шурра, сложность которой составляет \( O(n^3) \), где \( n \) — размер матрицы.

Пример:

MatrixXcf A = MatrixXcf::Random(4,4);
cout << "Here is a random 4x4 matrix, A:" << endl << A << endl << endl;
 
ComplexEigenSolver<MatrixXcf> ces;
ces.compute(A);
cout << "The eigenvalues of A are:" << endl << ces.eigenvalues() << endl;
cout << "The matrix of eigenvectors, V, is:" << endl << ces.eigenvectors() << endl << endl;
 
complex<float> lambda = ces.eigenvalues()[0];
cout << "Consider the first eigenvalue, lambda = " << lambda << endl;
VectorXcf v = ces.eigenvectors().col(0);
cout << "If v is the corresponding eigenvector, then lambda * v = " << endl << lambda * v << endl;
cout << "... and A * v = " << endl << A * v << endl << endl;
 
cout << "Finally, V * D * V^(-1) = " << endl
     << ces.eigenvectors() * ces.eigenvalues().asDiagonal() * ces.eigenvectors().inverse() << endl;

Вывод:

Here is a random 4x4 matrix, A:
  (-0.211,0.68)  (0.108,-0.444)   (0.435,0.271) (-0.198,-0.687)
  (0.597,0.566) (0.258,-0.0452)  (0.214,-0.717)  (-0.782,-0.74)
 (-0.605,0.823)  (0.0268,-0.27) (-0.514,-0.967)  (-0.563,0.998)
  (0.536,-0.33)   (0.832,0.904)  (0.608,-0.726)  (0.678,0.0259)

The eigenvalues of A are:
 (0.137,0.505)
 (-0.758,1.22)
 (1.52,-0.402)
(-0.691,-1.63)
The matrix of eigenvectors, V, is:
  (-0.246,-0.106)     (0.418,0.263)   (0.0417,-0.296)    (-0.122,0.271)
  (-0.205,-0.629)    (0.466,-0.457)    (0.244,-0.456)      (0.247,0.23)
 (-0.432,-0.0359) (-0.0651,-0.0146)    (-0.191,0.334)   (0.859,-0.0877)
    (-0.301,0.46)    (-0.41,-0.397)     (0.623,0.328)    (-0.116,0.195)

Consider the first eigenvalue, lambda = (0.137,0.505)
If v is the corresponding eigenvector, then lambda * v = 
 (0.0197,-0.139)
    (0.29,-0.19)
(-0.0412,-0.223)
(-0.274,-0.0891)
... and A * v = 
 (0.0197,-0.139)
    (0.29,-0.19)
(-0.0412,-0.223)
(-0.274,-0.0891)

Finally, V * D * V^(-1) = 
  (-0.211,0.68)  (0.108,-0.444)   (0.435,0.271) (-0.198,-0.687)
  (0.597,0.566) (0.258,-0.0452)  (0.214,-0.717)  (-0.782,-0.74)
 (-0.605,0.823)  (0.0268,-0.27) (-0.514,-0.967)  (-0.563,0.998)
  (0.536,-0.33)   (0.832,0.904)  (0.608,-0.726)  (0.678,0.0259)

eigenvalues()

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

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

Возвращает
Ссылка на константу на столбец-вектор, содержащий собственные значения.
Предварительное условие
Должно быть выполнено либо вызов конструктора ComplexEigenSolver(const MatrixType& matrix, bool), либо вызов члена compute(const MatrixType& matrix, bool) для вычисления собственного разложения матрицы.

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

Пример:

MatrixXcf ones = MatrixXcf::Ones(3,3);
ComplexEigenSolver<MatrixXcf> ces(ones, /* computeEigenvectors = */ false);
cout << "The eigenvalues of the 3x3 matrix of ones are:" 
     << endl << ces.eigenvalues() << endl;

Вывод:

The eigenvalues of the 3x3 matrix of ones are:
(0,-0)
 (0,0)
 (3,0)

eigenvectors()

template<typename _MatrixType >
const EigenvectorType& Eigen::ComplexEigenSolver< _MatrixType >::eigenvectors ( ) const
inline

Возвращает собственные векторы заданной матрицы.

Возвращает
Ссылка на константу на матрицу, столбцы которой — собственные векторы.
Предварительное условие
Должно быть выполнено либо вызов конструктора ComplexEigenSolver(const MatrixType& matrix, bool), либо вызов члена compute(const MatrixType& matrix, bool) для вычисления собственного разложения матрицы, и computeEigenvectors было установлено в значение true (по умолчанию).

Эта функция возвращает матрицу, столбцы которой — собственные векторы. Столбец \( k \) — собственный вектор, соответствующий собственному значению под номером \( k \), как возвращается функцией eigenvalues(). Собственные векторы нормализованы так, чтобы иметь (евклидову) норму, равную единице. Матрица, возвращаемая этой функцией, является матрицей \( V \) в собственном разложении \( A = V D V^{-1} \), если оно существует.

Пример:

MatrixXcf ones = MatrixXcf::Ones(3,3);
ComplexEigenSolver<MatrixXcf> ces(ones);
cout << "The first eigenvector of the 3x3 matrix of ones is:" 
     << endl << ces.eigenvectors().col(0) << endl;

Вывод:

The first eigenvector of the 3x3 matrix of ones is:
(-0.816,0)
 (0.408,0)
 (0.408,0)

info()

template<typename _MatrixType >
ComputationInfo Eigen::ComplexEigenSolver< _MatrixType >::info ( ) const
inline

Сообщает, было ли успешным предыдущее вычисление.

Возвращает
Success если вычисление было успешным, NoConvergence в противном случае.

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

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

Spec-Zone.ru

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