Eigen::ComplexSchur
template<typename _MatrixType>
class Eigen::ComplexSchur< _MatrixType >
Выполняет комплексное разложение Шура действительной или комплексной квадратной матрицы.
Определяется в модуле собственных значений.
#include <Eigen/Eigenvalues>
- Параметры шаблона
-
_MatrixType тип матрицы, для которой вычисляется разложение Шура; ожидается, что это экземпляр шаблона класса Matrix.
Для данной действительной или комплексной квадратной матрицы A, этот класс вычисляет разложение Шура: \( A = U T U^*\) где U — унитарная комплексная матрица, а T — комплексная верхняя треугольная матрица. Диагональ матрицы T соответствует собственным значениям матрицы A.
Вызовите функцию compute(), чтобы вычислить разложение Шура заданной матрицы. В качестве альтернативы, вы можете использовать конструктор ComplexSchur(const MatrixType&, bool), который вычисляет разложение Шура во время создания. После вычисления разложения, вы можете использовать функции matrixU() и matrixT(), чтобы получить матрицы U и V в разложении.
- Примечание
- Этот код вдохновлен Jampack
- См. также
- класс RealSchur, класс EigenSolver, класс ComplexEigenSolver
| typedef Matrix< ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime > | ComplexMatrixType |
| Тип для матриц в разложении Шура. Подробнее... |
|
| typedef std::complex< RealScalar > | ComplexScalar |
Тип комплексного скаляра для _MatrixType. Подробнее... |
|
| typedef Eigen::Index | Index |
| typedef MatrixType::Scalar | Scalar |
Тип скаляра для матриц типа _MatrixType. |
|
| template<typename InputType > | |
| ComplexSchur (const EigenBase< InputType > &matrix, bool computeU=true) | |
| Конструктор; вычисляет разложение Шура заданной матрицы. Подробнее... |
|
| ComplexSchur (Index size=RowsAtCompileTime==Dynamic ? 1 :RowsAtCompileTime) | |
| Конструктор по умолчанию. Подробнее... |
|
| template<typename InputType > | |
| ComplexSchur & | compute (const EigenBase< InputType > &matrix, bool computeU=true) |
| Вычисляет разложение Шура заданной матрицы. Подробнее... |
|
| template<typename HessMatrixType , typename OrthMatrixType > | |
| ComplexSchur & | computeFromHessenberg (const HessMatrixType &matrixH, const OrthMatrixType &matrixQ, bool computeU=true) |
| Вычисляет разложение Шура из заданной матрицы в гёльдерберговой форме. Подробнее... |
|
| Index | getMaxIterations () |
| Возвращает максимальное количество итераций. |
|
| ComputationInfo | info () const |
| Сообщает, был ли успешен предыдущий вызов. Подробнее... |
|
| const ComplexMatrixType & | matrixT () const |
| Возвращает треугольную матрицу в разложении Шура. Подробнее... |
|
| const ComplexMatrixType & | matrixU () const |
| Возвращает унитарную матрицу в разложении Шура. Подробнее... |
|
| ComplexSchur & | setMaxIterations (Index maxIters) |
| Устанавливает максимальное количество разрешенных итераций. Подробнее... |
|
| static const int | m_maxIterationsPerRow |
| Максимальное количество итераций на строку. Подробнее... |
|
ComplexMatrixType
| typedef Matrix<ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime> Eigen::ComplexSchur< _MatrixType >::ComplexMatrixType |
Тип для матриц в разложении Шура.
Это квадратная матрица с элементами типа ComplexScalar. Размер совпадает с размером _MatrixType.
ComplexScalar
| typedef std::complex<RealScalar> Eigen::ComplexSchur< _MatrixType >::ComplexScalar |
Index
| typedef Eigen::Index Eigen::ComplexSchur< _MatrixType >::Index |
- Отменено:
- с Eigen 3.3
ComplexSchur() [1/2]
| inlineexplicit |
Конструктор по умолчанию.
- Параметры
-
[in] size Положительное целое число, размер матрицы, для которой будет вычислено разложение Шур.
Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнять разложения с помощью compute(). Параметр size используется только в качестве подсказки. Неправильное значение size не является ошибкой, но может ухудшить производительность.
- См. также
- compute() для примера.
ComplexSchur() [2/2]
| inlineexplicit |
Конструктор; вычисляет разложение Шур заданной матрицы.
- Параметры
-
[in] matrix Квадратная матрица, для которой необходимо вычислить разложение Шур. [in] computeU Если true, вычисляются как T, так и U; если false, вычисляется только T.
Этот конструктор вызывает compute() для вычисления разложения Шур.
compute()
| ComplexSchur& Eigen::ComplexSchur< _MatrixType >::compute | ( | const EigenBase< InputType > & | matrix, |
| bool |
computeU = true | ||
| ) |
Вычисляет разложение Шур заданной матрицы.
- Параметры
-
[in] matrix Квадратная матрица, для которой необходимо вычислить разложение Шур. [in] computeU Если true, вычисляются как T, так и U; если false, вычисляется только T.
- Возвращает
- Ссылка на
*this
Разложение Шур вычисляется путем сначала приведения матрицы к форме Хессенберга с помощью класса HessenbergDecomposition. Матрица Хессенберга затем приводится к треугольной форме путем выполнения итераций QR с одним сдвигом. Стоимость вычисления разложения Шур зависит от количества итераций; в качестве грубой оценки, она может быть принята как \(25n^3\) комплексных операций, или \(10n^3\) комплексных операций, если computeU равно false.
Пример:
MatrixXcf A = MatrixXcf::Random(4,4); ComplexSchur<MatrixXcf> schur(4); schur.compute(A); cout << "The matrix T in the decomposition of A is:" << endl << schur.matrixT() << endl; schur.compute(A.inverse()); cout << "The matrix T in the decomposition of A^(-1) is:" << endl << schur.matrixT() << endl;
Вывод:
The matrix T in the decomposition of A is:
(-0.691,-1.63) (0.763,-0.144) (-0.104,-0.836) (-0.462,-0.378)
(0,0) (-0.758,1.22) (-0.65,-0.772) (-0.244,0.113)
(0,0) (0,0) (0.137,0.505) (0.0687,-0.404)
(0,0) (0,0) (0,0) (1.52,-0.402)
The matrix T in the decomposition of A^(-1) is:
(0.501,-1.84) (-1.01,-0.984) (0.636,1.3) (-0.676,0.352)
(0,0) (-0.369,-0.593) (0.0733,0.18) (-0.0658,-0.0263)
(0,0) (0,0) (-0.222,0.521) (-0.191,0.121)
(0,0) (0,0) (0,0) (0.614,0.162)
- См. также
- compute(const MatrixType&, bool, Index)
computeFromHessenberg()
| ComplexSchur& Eigen::ComplexSchur< _MatrixType >::computeFromHessenberg | ( | const HessMatrixType & | matrixH, |
| const OrthMatrixType & | matrixQ, | ||
| bool |
computeU = true | ||
| ) |
Вычислить разложение Шур из заданной матрицы Хессенберга.
- Параметры
-
[in] matrixH Матрица в форме Хессенберга H [in] matrixQ ортогональная матрица Q, которая преобразует матрицу A в H : A = Q H Q^T computeU Вычисляет матрицу U собственных векторов Шур
- Возвращает
- Ссылка на
*this
Эта функция предполагает, что матрица уже приведена к форме Хессенберга matrixH с помощью класса HessenbergDecomposition или другим способом. Она вычисляет верхнетреугольную квазиматрицу T разложения Шур матрицы H. Если computeU равно true, эта функция вычисляет матрицу U такую, что A = U T U^T = (QZ) T (QZ)^T = Q H Q^T, где A - исходная матрица
ПРИМЕЧАНИЕ Q используется, если computeU равно true; поэтому, если исходная ортогональная матрица недоступна, пользователь должен задать единичную матрицу (Q.setIdentity())
- См. также
- compute(const MatrixType&, bool)
info()
| inline |
Сообщает, было ли предыдущее вычисление успешным.
- Возвращает
-
Successесли вычисление прошло успешно,NoConvergenceв противном случае.
matrixT()
| inline |
Возвращает треугольную матрицу в разложении Шур.
- Возвращает
- Константная ссылка на матрицу T.
Предполагается, что либо конструктор ComplexSchur(const MatrixType& matrix, bool computeU), либо функция-член compute(const MatrixType& matrix, bool computeU) были вызваны ранее для вычисления разложения Шур матрицы.
Обратите внимание, что эта функция возвращает простую квадратную матрицу. Если вы хотите ссылаться только на верхнюю треугольную часть, используйте:
schur.matrixT().triangularView<Upper>()
Пример:
MatrixXcf A = MatrixXcf::Random(4,4); cout << "Here is a random 4x4 matrix, A:" << endl << A << endl << endl; ComplexSchur<MatrixXcf> schurOfA(A, false); // false means do not compute U cout << "The triangular matrix T is:" << endl << schurOfA.matrixT() << 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 triangular matrix T is:
(-0.691,-1.63) (0.763,-0.144) (-0.104,-0.836) (-0.462,-0.378)
(0,0) (-0.758,1.22) (-0.65,-0.772) (-0.244,0.113)
(0,0) (0,0) (0.137,0.505) (0.0687,-0.404)
(0,0) (0,0) (0,0) (1.52,-0.402)
matrixU()
| inline |
Возвращает унитарную матрицу в разложении Шур.
- Возвращает
- Константная ссылка на матрицу U.
Предполагается, что либо конструктор ComplexSchur(const MatrixType& matrix, bool computeU), либо функция-член compute(const MatrixType& matrix, bool computeU) были вызваны ранее для вычисления разложения Шур матрицы, и что computeU было установлено в значение true (по умолчанию).
Пример:
MatrixXcf A = MatrixXcf::Random(4,4); cout << "Here is a random 4x4 matrix, A:" << endl << A << endl << endl; ComplexSchur<MatrixXcf> schurOfA(A); cout << "The unitary matrix U is:" << endl << schurOfA.matrixU() << 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 unitary matrix U is: (-0.122,0.271) (0.354,0.255) (-0.7,0.321) (0.0909,-0.346) (0.247,0.23) (0.435,-0.395) (0.184,-0.38) (0.492,-0.347) (0.859,-0.0877) (0.00469,0.21) (-0.256,0.0163) (0.133,0.355) (-0.116,0.195) (-0.484,-0.432) (-0.183,0.359) (0.559,0.231)
setMaxIterations()
| inline |
Устанавливает максимальное количество итераций.
Если пользователь не указывает, максимальное количество итераций равно m_maxIterationsPerRow умноженное на размер матрицы.
m_maxIterationsPerRow
| static |
Максимальное количество итераций на строку.
Если не указано иное, максимальное количество итераций равно этому числу, умноженному на размер матрицы. В настоящее время установлено в 30.
The documentation for this class was generated from the following file:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1ComplexSchur.html