Spec-Zone.ru › Eigen3

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

template<typename _MatrixType >
typedef Matrix<Scalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> Eigen::HessenbergDecomposition< _MatrixType >::CoeffVectorType

Тип для вектора коэффициентов Хаусхолдера.

Это столбец-вектор с элементами типа Scalar. Длина вектора на единицу меньше размера MatrixType, если это тип с фиксированными размерами.

Index

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

HessenbergDecomposition() [1/2]

template<typename _MatrixType >
Eigen::HessenbergDecomposition< _MatrixType >::HessenbergDecomposition ( Index size = Size==Dynamic ? 2 : Size )
inlineexplicit

Конструктор по умолчанию; разложение будет вычислено позже.

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

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

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

HessenbergDecomposition() [2/2]

template<typename _MatrixType >
template<typename InputType >
Eigen::HessenbergDecomposition< _MatrixType >::HessenbergDecomposition ( const EigenBase< InputType > & matrix )
inlineexplicit

Конструктор; вычисляет разложение матрицы в хессенбергову форму.

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

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

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

compute()

template<typename _MatrixType >
template<typename InputType >
HessenbergDecomposition& Eigen::HessenbergDecomposition< _MatrixType >::compute ( const EigenBase< InputType > & matrix )
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()

template<typename _MatrixType >
const CoeffVectorType& Eigen::HessenbergDecomposition< _MatrixType >::householderCoefficients ( ) const
inline

Возвращает коэффициенты Хаусхолдера.

Возвращает
постоянную ссылку на вектор коэффициентов Хаусхолдера
Предварительное условие
Должен быть вызван либо конструктор HessenbergDecomposition(const MatrixType&), либо метод compute(const MatrixType&) для вычисления разложения матрицы в хессенбергову форму.

Коэффициенты Хаусхолдера позволяют восстановить матрицу \( Q \) в разложении по данным в упакованном виде.

См. также
packedMatrix(), Модуль Хаусхолдера

matrixH()

template<typename _MatrixType >
MatrixHReturnType Eigen::HessenbergDecomposition< _MatrixType >::matrixH ( ) const
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()

template<typename _MatrixType >
HouseholderSequenceType Eigen::HessenbergDecomposition< _MatrixType >::matrixQ ( ) const
inline

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

Возвращает
объект, представляющий матрицу Q
Предварительное условие
Должен быть вызван либо конструктор HessenbergDecomposition(const MatrixType&), либо метод compute(const MatrixType&) для вычисления разложения матрицы в хессенбергову форму.

Эта функция возвращает лёгковесный объект класса шаблонов HouseholderSequence. Его можно либо применить напрямую к матрице, либо преобразовать в матрицу типа MatrixType.

См. также
matrixH() для примера, класс HouseholderSequence

packedMatrix()

template<typename _MatrixType >
const MatrixType& Eigen::HessenbergDecomposition< _MatrixType >::packedMatrix ( ) const
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:
  • HessenbergDecomposition.h

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

Spec-Zone.ru

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