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
| typedef std::complex<RealScalar> Eigen::ComplexEigenSolver< _MatrixType >::ComplexScalar |
Тип комплексного скаляра для MatrixType.
Это std::complex<Scalar> если Scalar вещественный (например, float или double) и просто Scalar если Scalar комплексный.
EigenvalueType
| typedef Matrix<ComplexScalar, ColsAtCompileTime, 1, Options&(~RowMajor), MaxColsAtCompileTime, 1> Eigen::ComplexEigenSolver< _MatrixType >::EigenvalueType |
Тип для вектора собственных значений, возвращаемого методом eigenvalues().
Это столбец вектора с элементами типа ComplexScalar. Длина вектора равна размеру MatrixType.
EigenvectorType
| typedef Matrix<ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime> Eigen::ComplexEigenSolver< _MatrixType >::EigenvectorType |
Тип для матрицы собственных векторов, возвращаемой методом eigenvectors().
Это квадратная матрица с элементами типа ComplexScalar. Размер совпадает с размером MatrixType.
Индекс
| typedef Eigen::Index Eigen::ComplexEigenSolver< _MatrixType >::Index |
- Устаревшее:
- с Eigen 3.3
ComplexEigenSolver() [1/3]
| inline |
Конструктор по умолчанию.
Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнить разложение с помощью compute().
ComplexEigenSolver() [2/3]
| inlineexplicit |
Конструктор по умолчанию с предварительной выделением памяти.
Подобно конструктору по умолчанию, но с предварительной выделением памяти для внутренних данных в соответствии со значением size задачи.
- См. также
- ComplexEigenSolver()
ComplexEigenSolver() [3/3]
| inlineexplicit |
Конструктор; вычисляет собственное разложение заданной матрицы.
- Параметры
-
[вход] matrix Квадратная матрица, для которой требуется вычислить собственное разложение. [вход] computeEigenvectors Если true, вычисляются как собственные векторы, так и собственные значения; если false, вычисляются только собственные значения.
Этот конструктор вызывает compute() для вычисления собственного разложения.
compute()
| 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()
| 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()
| 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()
| inline |
Сообщает, было ли успешным предыдущее вычисление.
- Возвращает
-
Successесли вычисление было успешным,NoConvergenceв противном случае.
Документация для этого класса была сгенерирована из следующего файла:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1ComplexEigenSolver.html