Spec-Zone.ru › Eigen3

Eigen::RealSchur

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

Выполняет действительное разложение Шура квадратной матрицы.

Определено в модуле Eigenvalues.

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

Для заданной вещественной квадратной матрицы A этот класс вычисляет действительное разложение Шура: \( A = U T U^T \), где U — вещественная ортогональная матрица, а T — вещественная квазитреугольная матрица. Ортогональная матрица — это матрица, обратная которой равна её транспонированной, \( U^{-1} = U^T \). Квазитреугольная матрица — это блочно-треугольная матрица, диагональ которой состоит из 1×1 блоков и 2×2 блоков с комплексными собственными значениями. Собственные значения блоков на диагонали T совпадают с собственными значениями матрицы A, и поэтому действительное разложение Шура используется в EigenSolver для вычисления собственного разложения матрицы.

Вызовите функцию compute() для вычисления действительного разложения Шура заданной матрицы. Альтернативно, можно использовать конструктор RealSchur(const MatrixType&, bool), который вычисляет действительное разложение Шура во время создания. После вычисления разложения можно использовать функции matrixU() и matrixT() для получения матриц U и T в разложении.

Документация RealSchur(const MatrixType&, bool) содержит пример типичного использования этого класса.

Примечание
Реализация адаптирована из JAMA (общественное достояние). Их код основан на EISPACK.
См. также
класс ComplexSchur, класс EigenSolver, класс ComplexEigenSolver
typedef Eigen::Index Index
template<typename InputType >
RealSchur & compute (const EigenBase< InputType > &matrix, bool computeU=true)
Вычисляет разложение Шура заданной матрицы. Подробнее...
template<typename HessMatrixType , typename OrthMatrixType >
RealSchur & computeFromHessenberg (const HessMatrixType &matrixH, const OrthMatrixType &matrixQ, bool computeU)
Вычисляет разложение Шура матрицы Хессенберга H = Z T Z^T. Подробнее...
Index getMaxIterations ()
Возвращает максимальное число итераций.
ComputationInfo info () const
Сообщает, была ли успешной предыдущая вычисление. Подробнее...
const MatrixType & matrixT () const
Возвращает квазитреугольную матрицу в разложении Шура. Подробнее...
const MatrixType & matrixU () const
Возвращает ортогональную матрицу в разложении Шура. Подробнее...
template<typename InputType >
RealSchur (const EigenBase< InputType > &matrix, bool computeU=true)
Конструктор; вычисляет действительное разложение Шура заданной матрицы. Подробнее...
RealSchur (Index size=RowsAtCompileTime==Dynamic ? 1 :RowsAtCompileTime)
Конструктор по умолчанию. Подробнее...
RealSchur & setMaxIterations (Index maxIters)
Устанавливает максимальное количество разрешённых итераций. Подробнее...
static const int m_maxIterationsPerRow
Максимальное количество итераций на строку. Подробнее...

Index

template<typename _MatrixType >
typedef Eigen::Index Eigen::RealSchur< _MatrixType >::Index
Устарело:
с Eigen 3.3

RealSchur() [1/2]

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

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

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

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

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

RealSchur() [2/2]

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

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

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

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

Пример:

MatrixXd A = MatrixXd::Random(6,6);
cout << "Here is a random 6x6 matrix, A:" << endl << A << endl << endl;
 
RealSchur<MatrixXd> schur(A);
cout << "The orthogonal matrix U is:" << endl << schur.matrixU() << endl;
cout << "The quasi-triangular matrix T is:" << endl << schur.matrixT() << endl << endl;
 
MatrixXd U = schur.matrixU();
MatrixXd T = schur.matrixT();
cout << "U * T * U^T = " << endl << U * T * U.transpose() << endl;

Вывод:

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

The orthogonal matrix U is:
  0.348  -0.754 0.00435  -0.351  0.0146   0.432
  -0.16  -0.266  -0.747   0.457  -0.366  0.0571
  0.505  -0.157  0.0746   0.644   0.518  -0.177
  0.703   0.324  -0.409  -0.349  -0.187  -0.275
  0.296   0.372    0.24   0.324  -0.379   0.684
 -0.126   0.305   -0.46  -0.161   0.647   0.485
The quasi-triangular matrix T is:
   -0.2   -1.83   0.864   0.271    1.09   0.139
  0.647   0.298 -0.0536   0.676  -0.288  0.0231
      0       0   0.967  -0.201  -0.429   0.847
      0       0       0   0.353   0.603   0.694
      0       0       0       0   0.572   -1.03
      0       0       0       0  0.0184   0.664

U * T * U^T = 
   0.68   -0.33   -0.27  -0.717  -0.687  0.0259
 -0.211   0.536  0.0268   0.214  -0.198   0.678
  0.566  -0.444   0.904  -0.967   -0.74   0.225
  0.597   0.108   0.832  -0.514  -0.782  -0.408
  0.823 -0.0452   0.271  -0.726   0.998   0.275
 -0.605   0.258   0.435   0.608  -0.563  0.0486

compute()

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

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

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

Разложение Шура вычисляется путем предварительного сведения матрицы к форме Хессенберга с помощью класса HessenbergDecomposition. Затем матрица Хессенберга сводится к треугольной форме путем выполнения итераций Фрэнсиса QR с неявным двойным сдвигом. Стоимость вычисления разложения Шура зависит от количества итераций; в качестве ориентировочного значения можно принять \(25n^3\) операций с плавающей точкой, если computeU равно true, и \(10n^3\) операций, если computeU равно false.

Пример:

MatrixXf A = MatrixXf::Random(4,4);
RealSchur<MatrixXf> schur(4);
schur.compute(A, /* computeU = */ false);
cout << "The matrix T in the decomposition of A is:" << endl << schur.matrixT() << endl;
schur.compute(A.inverse(), /* computeU = */ false);
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.523 -0.698  0.148  0.742
 0.475  0.986 -0.793  0.721
     0      0  -0.28  -0.77
     0      0 0.0145 -0.367
The matrix T in the decomposition of A^(-1) is:
-3.06 -4.57 -5.97  5.48
0.168 -2.62 -3.27   3.9
    0     0 0.427 0.573
    0     0 -1.05  1.35
См. также
compute(const MatrixType&, bool, Index)

computeFromHessenberg()

template<typename _MatrixType >
template<typename HessMatrixType , typename OrthMatrixType >
RealSchur& Eigen::RealSchur< _MatrixType >::computeFromHessenberg ( const HessMatrixType & matrixH,
const OrthMatrixType & matrixQ,
bool computeU
)

Вычисляет разложение Шура матрицы Хессенберга H = Z T Z^T.

Параметры
[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::RealSchur< _MatrixType >::info ( ) const
inline

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

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

matrixT()

template<typename _MatrixType >
const MatrixType& Eigen::RealSchur< _MatrixType >::matrixT ( ) const
inline

Возвращает квазитреугольную матрицу в разложении Шура.

Возвращает
Константная ссылка на матрицу T.
Предварительное условие
До вызова конструктора RealSchur(const MatrixType&, bool) или члена compute(const MatrixType&, bool) для вычисления разложения Шура матрицы.
См. также
RealSchur(const MatrixType&, bool) для примера

matrixU()

template<typename _MatrixType >
const MatrixType& Eigen::RealSchur< _MatrixType >::matrixU ( ) const
inline

Возвращает ортогональную матрицу в разложении Шура.

Возвращает
Константная ссылка на матрицу U.
Предварительное условие
До вызова конструктора RealSchur(const MatrixType&, bool) или члена compute(const MatrixType&, bool) для вычисления разложения Шура матрицы, и computeU было установлено в значение true (значение по умолчанию).
См. также
RealSchur(const MatrixType&, bool) для примера

setMaxIterations()

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

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

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

m_maxIterationsPerRow

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

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

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


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

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

Spec-Zone.ru

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