Eigen::HessenbergDecomposition
template<typename _MatrixType>
class Eigen::HessenbergDecomposition< _MatrixType >
Приводит квадратную матрицу к форме Хессенберга с помощью ортогонального преобразования подобия.
Определено в модуле Eigenvalues.
#include <Eigen/Eigenvalues>
- Параметры шаблона
-
_MatrixType тип матрицы, для которой вычисляется разложение в форме Хессенберга
Этот класс выполняет разложение матрицы \( A \) в форме Хессенберга. В вещественном случае разложение в форме Хессенберга состоит из ортогональной матрицы \( Q \) и матрицы Хессенберга \( H \) такой, что \( A = Q H Q^T \). Ортогональная матрица — это матрица, обратная которой равна её транспонированной ( \( Q^{-1} = Q^T \)). Матрица Хессенберга имеет нули ниже побочной диагонали, поэтому она почти верхнетреугольная. Разложение матрицы комплексной матрицы в форме Хессенберга имеет вид \( A = Q H Q^* \) с \( Q \) унитарной (то есть \( Q^{-1} = Q^* \)).
Вызовите функцию compute(), чтобы вычислить разложение в форме Хессенберга заданной матрицы. Альтернативно, вы можете использовать конструктор HessenbergDecomposition(const MatrixType&), который вычисляет разложение в форме Хессенберга во время создания. После вычисления разложения вы можете использовать функции matrixH() и matrixQ() для построения матриц H и Q в разложении.
Документация для matrixH() содержит пример типичного использования этого класса.
- См. также
- класс ComplexSchur, класс Tridiagonalization, Модуль QR
| typedef Matrix< Scalar, SizeMinusOne, 1, Options &~RowMajor, MaxSizeMinusOne, 1 > | CoeffVectorType |
| Тип для вектора коэффициентов Хаусхолдера. Подробнее... |
|
| typedef HouseholderSequence< MatrixType, typename internal::remove_all< typename CoeffVectorType::ConjugateReturnType >::type > | HouseholderSequenceType |
| Возвращаемый тип matrixQ() |
|
| typedef Eigen::Index | Index |
| typedef _MatrixType | MatrixType |
Синоним для параметра шаблона _MatrixType. |
|
| typedef MatrixType::Scalar | Scalar |
| Тип скаляра для матриц типа MatrixType. |
|
| template<typename InputType > | |
| HessenbergDecomposition & | compute (const EigenBase< InputType > &matrix) |
| Вычисляет разложение в форме Хессенберга заданной матрицы. Подробнее... |
|
| template<typename InputType > | |
| HessenbergDecomposition (const EigenBase< InputType > &matrix) | |
| Конструктор; вычисляет разложение в форме Хессенберга заданной матрицы. Подробнее... |
|
| HessenbergDecomposition (Index size=Size==Dynamic ? 2 :Size) | |
| Конструктор по умолчанию; разложение будет вычислено позже. Подробнее... |
|
| const CoeffVectorType & | householderCoefficients () const |
| Возвращает коэффициенты Хаусхолдера. Подробнее... |
|
| MatrixHReturnType | matrixH () const |
| Создаёт матрицу Хессенберга H в разложении. Подробнее... |
|
| HouseholderSequenceType | matrixQ () const |
| Восстанавливает ортогональную матрицу Q в разложении. Подробнее... |
|
| const MatrixType & | packedMatrix () const |
| Возвращает внутреннее представление разложения. Подробнее... |
|
CoeffVectorType
| typedef Matrix<Scalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> Eigen::HessenbergDecomposition< _MatrixType >::CoeffVectorType |
Тип для вектора коэффициентов Хаусхолдера.
Это столбец-вектор с элементами типа Scalar. Длина вектора на единицу меньше размера MatrixType, если это тип с фиксированными размерами.
Index
| typedef Eigen::Index Eigen::HessenbergDecomposition< _MatrixType >::Index |
HessenbergDecomposition() [1/2]
| inlineexplicit |
Конструктор по умолчанию; разложение будет вычислено позже.
- Параметры
-
[in] size Размер матрицы, для которой будет вычислено разложение в хессенбергову форму.
Конструктор по умолчанию полезен в тех случаях, когда пользователь намерен выполнять разложения с помощью compute(). Параметр size используется только как подсказка. Неправильное значение size не является ошибкой, но может ухудшить производительность.
- См. также
- compute() для примера.
HessenbergDecomposition() [2/2]
| inlineexplicit |
compute()
| inline |
Вычисляет разложение матрицы в хессенбергову форму.
- Параметры
-
[in] matrix Квадратная матрица, для которой необходимо вычислить разложение.
- Возвращает
- Ссылка на
*this
Разложение в хессенбергову форму вычисляется путем последовательного приведения столбцов матрицы к требуемому виду с помощью отражений Хаусхолдера (см., например, алгоритм 7.4.2 в Golub & Van Loan, «Матричные вычисления»). Стоимость операции составляет \( 10n^3/3 \) операций с плавающей точкой, где \( n \) — размер заданной матрицы.
Этот метод повторно использует выделенные данные в объекте HessenbergDecomposition.
Пример:
MatrixXcf A = MatrixXcf::Random(4,4); HessenbergDecomposition<MatrixXcf> hd(4); hd.compute(A); cout << "The matrix H in the decomposition of A is:" << endl << hd.matrixH() << endl; hd.compute(2*A); // re-use hd to compute and store decomposition of 2A cout << "The matrix H in the decomposition of 2A is:" << endl << hd.matrixH() << endl;
Вывод:
The matrix H in the decomposition of A is:
(-0.211,0.68) (0.346,0.216) (-0.688,0.00979) (0.0451,0.584)
(-1.45,0) (-0.0574,-0.0123) (-0.196,0.385) (0.395,0.389)
(0,0) (1.68,0) (-0.397,-0.552) (0.156,-0.241)
(0,0) (0,0) (1.56,0) (0.876,-0.423)
The matrix H in the decomposition of 2A is:
(-0.422,1.36) (0.691,0.431) (-1.38,0.0196) (0.0902,1.17)
(-2.91,0) (-0.115,-0.0246) (-0.392,0.77) (0.791,0.777)
(0,0) (3.36,0) (-0.795,-1.1) (0.311,-0.482)
(0,0) (0,0) (3.12,0) (1.75,-0.846)
householderCoefficients()
| inline |
Возвращает коэффициенты Хаусхолдера.
- Возвращает
- постоянную ссылку на вектор коэффициентов Хаусхолдера
- Предварительное условие
- Должен быть вызван либо конструктор HessenbergDecomposition(const MatrixType&), либо метод compute(const MatrixType&) для вычисления разложения матрицы в хессенбергову форму.
Коэффициенты Хаусхолдера позволяют восстановить матрицу \( Q \) в разложении по данным в упакованном виде.
- См. также
- packedMatrix(), Модуль Хаусхолдера
matrixH()
| inline |
Строит матрицу Хессенберга H в разложении.
- Возвращает
- объект, представляющий матрицу H
- Предварительное условие
- Должен быть вызван либо конструктор HessenbergDecomposition(const MatrixType&), либо метод compute(const MatrixType&) для вычисления разложения матрицы в хессенбергову форму.
Объект, возвращаемый этой функцией, строит матрицу Хессенберга H при присваивании ее матрице или при ее вычислении. Матрица H строится из упакованной матрицы, возвращаемой packedMatrix(): верхняя часть (включая поддиагональ) упакованной матрицы содержит матрицу H. Иногда может быть лучше использовать напрямую упакованную матрицу вместо построения матрицы H.
Пример:
Matrix4f A = MatrixXf::Random(4,4); cout << "Here is a random 4x4 matrix:" << endl << A << endl; HessenbergDecomposition<MatrixXf> hessOfA(A); MatrixXf H = hessOfA.matrixH(); cout << "The Hessenberg matrix H is:" << endl << H << endl; MatrixXf Q = hessOfA.matrixQ(); cout << "The orthogonal matrix Q is:" << endl << Q << endl; cout << "Q H Q^T is:" << endl << Q * H * Q.transpose() << endl;
Вывод:
Here is a random 4x4 matrix:
0.68 0.823 -0.444 -0.27
-0.211 -0.605 0.108 0.0268
0.566 -0.33 -0.0452 0.904
0.597 0.536 0.258 0.832
The Hessenberg matrix H is:
0.68 -0.691 -0.645 0.235
0.849 0.836 -0.419 0.794
0 -0.469 -0.547 -0.0731
0 0 -0.559 -0.107
The orthogonal matrix Q is:
1 0 0 0
0 -0.249 -0.958 0.144
0 0.667 -0.277 -0.692
0 0.703 -0.0761 0.707
Q H Q^T is:
0.68 0.823 -0.444 -0.27
-0.211 -0.605 0.108 0.0268
0.566 -0.33 -0.0452 0.904
0.597 0.536 0.258 0.832
- См. также
- matrixQ(), packedMatrix()
matrixQ()
| inline |
Восстанавливает ортогональную матрицу Q в разложении.
- Возвращает
- объект, представляющий матрицу Q
- Предварительное условие
- Должен быть вызван либо конструктор HessenbergDecomposition(const MatrixType&), либо метод compute(const MatrixType&) для вычисления разложения матрицы в хессенбергову форму.
Эта функция возвращает лёгковесный объект класса шаблонов HouseholderSequence. Его можно либо применить напрямую к матрице, либо преобразовать в матрицу типа MatrixType.
- См. также
- matrixH() для примера, класс HouseholderSequence
packedMatrix()
| inline |
Возвращает внутреннее представление разложения.
- Возвращает
- постоянную ссылку на матрицу с внутренним представлением разложения.
- Предварительное условие
- Должен быть вызван либо конструктор HessenbergDecomposition(const MatrixType&), либо метод compute(const MatrixType&) для вычисления разложения матрицы в хессенбергову форму.
Возвращаемая матрица содержит следующую информацию:
- верхняя часть и нижняя поддиагональ представляют матрицу Хессенберга H
- остальная часть нижней части содержит векторы Хаусхолдера, которые, вместе с коэффициентами Хаусхолдера, возвращаемыми householderCoefficients(), позволяют восстановить матрицу Q как \( Q = H_{N-1} \ldots H_1 H_0 \). Здесь матрицы \( H_i \) являются преобразованиями Хаусхолдера \( H_i = (I - h_i v_i v_i^T) \), где \( h_i \) — \( i \)й коэффициент Хаусхолдера, а \( v_i \) — вектор Хаусхолдера, определяемый как \( v_i = [ 0, \ldots, 0, 1, M(i+2,i), \ldots, M(N-1,i) ]^T \) с M — матрицей, возвращаемой этой функцией.
См. LAPACK для получения дополнительных сведений об этом представлении в упакованном виде.
Пример:
Matrix4d A = Matrix4d::Random(4,4); cout << "Here is a random 4x4 matrix:" << endl << A << endl; HessenbergDecomposition<Matrix4d> hessOfA(A); Matrix4d pm = hessOfA.packedMatrix(); cout << "The packed matrix M is:" << endl << pm << endl; cout << "The upper Hessenberg part corresponds to the matrix H, which is:" << endl << hessOfA.matrixH() << endl; Vector3d hc = hessOfA.householderCoefficients(); cout << "The vector of Householder coefficients is:" << endl << hc << endl;
Вывод:
Here is a random 4x4 matrix:
0.68 0.823 -0.444 -0.27
-0.211 -0.605 0.108 0.0268
0.566 -0.33 -0.0452 0.904
0.597 0.536 0.258 0.832
The packed matrix M is:
0.68 -0.691 -0.645 0.235
0.849 0.836 -0.419 0.794
-0.534 -0.469 -0.547 -0.0731
-0.563 0.344 -0.559 -0.107
The upper Hessenberg part corresponds to the matrix H, which is:
0.68 -0.691 -0.645 0.235
0.849 0.836 -0.419 0.794
0 -0.469 -0.547 -0.0731
0 0 -0.559 -0.107
The vector of Householder coefficients is:
1.25
1.79
0
- См. также
- householderCoefficients()
The documentation for this class was generated from the following file:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1HessenbergDecomposition.html