Spec-Zone.ru › Eigen3

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

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

Тип для матриц в разложении Шура.

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

ComplexScalar

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

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

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

Index

template<typename _MatrixType >
typedef Eigen::Index Eigen::ComplexSchur< _MatrixType >::Index
Отменено:
с Eigen 3.3

ComplexSchur() [1/2]

template<typename _MatrixType >
Eigen::ComplexSchur< _MatrixType >::ComplexSchur ( Index size = RowsAtCompileTime==Dynamic ? 1 : RowsAtCompileTime )
inlineexplicit

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

Параметры
[in] size Положительное целое число, размер матрицы, для которой будет вычислено разложение Шур.

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

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

ComplexSchur() [2/2]

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

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

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

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

См. также
matrixT() и matrixU() для примеров.

compute()

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

template<typename _MatrixType >
template<typename HessMatrixType , typename OrthMatrixType >
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()

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

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

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

matrixT()

template<typename _MatrixType >
const ComplexMatrixType& Eigen::ComplexSchur< _MatrixType >::matrixT ( ) const
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()

template<typename _MatrixType >
const ComplexMatrixType& Eigen::ComplexSchur< _MatrixType >::matrixU ( ) const
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()

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

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

Если пользователь не указывает, максимальное количество итераций равно m_maxIterationsPerRow умноженное на размер матрицы.

m_maxIterationsPerRow

template<typename _MatrixType >
const int Eigen::ComplexSchur< _MatrixType >::m_maxIterationsPerRow
static

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

Если не указано иное, максимальное количество итераций равно этому числу, умноженному на размер матрицы. В настоящее время установлено в 30.


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

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

Spec-Zone.ru

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