Spec-Zone.ru › Eigen3

Eigen::HouseholderSequence

template<typename VectorsType, typename CoeffsType, int Side>
class Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >

Последовательность отражений Хаусхолдера, действующих на подпространства с уменьшающимся размером.

Определена в модуле Хаусхолдера.

#include <Eigen/Householder> 
Параметры шаблона
VectorsType тип матрицы, содержащей векторы Хаусхолдера
CoeffsType тип вектора, содержащего коэффициенты Хаусхолдера
Side либо OnTheLeft (по умолчанию), либо OnTheRight

Этот класс представляет последовательность произведения отражений Хаусхолдера, где первое отражение Хаусхолдера действует на всё пространство, второе отражение Хаусхолдера оставляет инвариантным одномерное подпространство, натянутое на первый единичный вектор, третье отражение Хаусхолдера оставляет инвариантным двумерное подпространство, натянутое на первые два единичных вектора и так далее, вплоть до последнего отражения, которое оставляет все, кроме одного измерения, инвариантным и действует только на последнее измерение. Такие последовательности отражений Хаусхолдера используются в нескольких алгоритмах для обнуления определённых частей матрицы. Действительно, методы HessenbergDecomposition::matrixQ(), Tridiagonalization::matrixQ(), HouseholderQR::householderQ() и ColPivHouseholderQR::householderQ() все возвращают HouseholderSequence.

Более точно, класс HouseholderSequence представляет \( n \times n \) матрицу \( H \) вида \( H = \prod_{i=0}^{n-1} H_i \), где i-е отражение Хаусхолдера равно \( H_i = I - h_i v_i v_i^* \). i-й коэффициент Хаусхолдера \( h_i \) — скаляр, а i-й вектор Хаусхолдера \( v_i \) — вектор вида

\[ v_i = [\underbrace{0, \ldots, 0}_{i-1\mbox{ нулей}}, 1, \underbrace{*, \ldots,*}_{n-i\mbox{ произвольных элементов}} ]. \]

Последние \( n-i \) элементов \( v_i \) называются существенной частью вектора Хаусхолдера.

Типичные примеры использования приведены ниже, где H — HouseholderSequence:

A.applyOnTheRight(H);             // A = A * H
A.applyOnTheLeft(H);              // A = H * A
A.applyOnTheRight(H.adjoint());   // A = A * H^*
A.applyOnTheLeft(H.adjoint());    // A = H^* * A
MatrixXd Q = H;                   // conversion to a dense matrix

Помимо сопряжённого, вы также можете применить обратные (=сопряжённые), транспонированные и сопряжённо-транспонированные операторы.

См. документацию для HouseholderSequence(const VectorsType&, const CoeffsType&) для примера.

См. также
MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
Inheritance graph
AdjointReturnType adjoint () const
Присоединённое (сопряжённо-транспонированное) преобразование последовательности Хаусхолдера.
EIGEN_CONSTEXPR Index cols () const EIGEN_NOEXCEPT
Количество столбцов преобразования, рассматриваемого как матрица. Подробнее...
ConjugateReturnType conjugate () const
Комплексно-сопряжённая последовательность Хаусхолдера.
template<bool Cond>
internal::conditional< Cond, ConjugateReturnType, ConstHouseholderSequence >::type conjugateIf () const
const EssentialVectorType essentialVector (Index k) const
Необходимая часть вектора Хаусхолдера. Подробнее...
HouseholderSequence (const HouseholderSequence &other)
Конструктор копирования.
HouseholderSequence (const VectorsType &v, const CoeffsType &h)
Конструктор. Подробнее...
AdjointReturnType inverse () const
Обратное преобразование последовательности Хаусхолдера (равно сопряжённо-транспонированному).
Index length () const
Возвращает длину последовательности Хаусхолдера.
template<typename OtherDerived >
internal::matrix_type_times_scalar_type< Scalar, OtherDerived >::Type operator* (const MatrixBase< OtherDerived > &other) const
Вычисляет произведение последовательности Хаусхолдера на матрицу. Подробнее...
EIGEN_CONSTEXPR Index rows () const EIGEN_NOEXCEPT
Количество строк преобразования, рассматриваемого как матрица. Подробнее...
HouseholderSequence & setLength (Index length)
Устанавливает длину последовательности Хаусхолдера. Подробнее...
HouseholderSequence & setShift (Index shift)
Устанавливает сдвиг последовательности Хаусхолдера. Подробнее...
Index shift () const
Возвращает сдвиг последовательности Хаусхолдера.
TransposeReturnType transpose () const
Транспонированная последовательность Хаусхолдера.
- Публичные методы, унаследованные от Eigen::EigenBase< HouseholderSequence< VectorsType, CoeffsType, Side > >
EIGEN_CONSTEXPR Index cols () const EIGEN_NOEXCEPT
HouseholderSequence< VectorsType, CoeffsType, Side > & derived ()
const HouseholderSequence< VectorsType, CoeffsType, Side > & derived () const
EIGEN_CONSTEXPR Index rows () const EIGEN_NOEXCEPT
EIGEN_CONSTEXPR Index size () const EIGEN_NOEXCEPT
- Публичные типы, унаследованные от Eigen::EigenBase< HouseholderSequence< VectorsType, CoeffsType, Side > >
typedef Eigen::Index Index
Тип индексов. Подробнее...

HouseholderSequence()

template<typename VectorsType , typename CoeffsType , int Side>
Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::HouseholderSequence ( const VectorsType & v,
const CoeffsType & h
)
inline

Конструктор.

Parameters
[in] v Матрица, содержащая необходимые части векторов Хаусхолдера.
[in] h Вектор, содержащий коэффициенты Хаусхолдера.

Создаёт последовательность Хаусхолдера с коэффициентами, заданными h, и векторами, заданными v. i-й коэффициент Хаусхолдера \( h_i \) задаётся h(i), а необходимая часть i-го вектора Хаусхолдера \( v_i \) задаётся v(k,i) при k > i (частично-диагональная часть i-го столбца). Если v имеет меньше столбцов, чем строк, то последовательность Хаусхолдера содержит столько отражений Хаусхолдера, сколько столбцов.

Note
Объект HouseholderSequence хранит v и h по ссылке.

Пример:

Matrix3d v = Matrix3d::Random();
cout << "The matrix v is:" << endl;
cout << v << endl;
 
Vector3d v0(1, v(1,0), v(2,0));
cout << "The first Householder vector is: v_0 = " << v0.transpose() << endl;
Vector3d v1(0, 1, v(2,1));
cout << "The second Householder vector is: v_1 = " << v1.transpose()  << endl;
Vector3d v2(0, 0, 1);
cout << "The third Householder vector is: v_2 = " << v2.transpose() << endl;
 
Vector3d h = Vector3d::Random();
cout << "The Householder coefficients are: h = " << h.transpose() << endl;
 
Matrix3d H0 = Matrix3d::Identity() - h(0) * v0 * v0.adjoint();
cout << "The first Householder reflection is represented by H_0 = " << endl;
cout << H0 << endl;
Matrix3d H1 = Matrix3d::Identity() - h(1) * v1 * v1.adjoint();
cout << "The second Householder reflection is represented by H_1 = " << endl;
cout << H1 << endl;
Matrix3d H2 = Matrix3d::Identity() - h(2) * v2 * v2.adjoint();
cout << "The third Householder reflection is represented by H_2 = " << endl;
cout << H2 << endl;
cout << "Their product is H_0 H_1 H_2 = " << endl;
cout << H0 * H1 * H2 << endl;
 
HouseholderSequence<Matrix3d, Vector3d> hhSeq(v, h);
Matrix3d hhSeqAsMatrix(hhSeq);
cout << "If we construct a HouseholderSequence from v and h" << endl;
cout << "and convert it to a matrix, we get:" << endl;
cout << hhSeqAsMatrix << endl;

Вывод:

The matrix v is:
  0.68  0.597  -0.33
-0.211  0.823  0.536
 0.566 -0.605 -0.444
The first Householder vector is: v_0 =      1 -0.211  0.566
The second Householder vector is: v_1 =      0      1 -0.605
The third Householder vector is: v_2 = 0 0 1
The Householder coefficients are: h =   0.108 -0.0452   0.258
The first Householder reflection is represented by H_0 = 
  0.892  0.0228 -0.0611
 0.0228   0.995  0.0129
-0.0611  0.0129   0.965
The second Householder reflection is represented by H_1 = 
      1       0       0
      0    1.05 -0.0273
      0 -0.0273    1.02
The third Householder reflection is represented by H_2 = 
    1     0     0
    0     1     0
    0     0 0.742
Their product is H_0 H_1 H_2 = 
  0.892  0.0255 -0.0466
 0.0228    1.04 -0.0105
-0.0611 -0.0129   0.728
If we construct a HouseholderSequence from v and h
and convert it to a matrix, we get:
  0.892  0.0255 -0.0466
 0.0228    1.04 -0.0105
-0.0611 -0.0129   0.728
См. также
setLength(), setShift()

cols()

template<typename VectorsType , typename CoeffsType , int Side>
EIGEN_CONSTEXPR Index Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::cols ( void ) const
inline

Количество столбцов преобразования, рассматриваемого как матрица.

Возвращает
Количество столбцов

Это равно размерности пространства, на котором действует преобразование.

conjugateIf()

template<typename VectorsType , typename CoeffsType , int Side>
template<bool Cond>
internal::conditional<Cond,ConjugateReturnType,ConstHouseholderSequence>::type Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::conjugateIf ( ) const
inline
Возвращает
выражение, представляющее комплексно сопряжённое значение *this если Cond==true, в противном случае возвращает *this.

essentialVector()

template<typename VectorsType , typename CoeffsType , int Side>
const EssentialVectorType Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::essentialVector ( Index k ) const
inline

Необходимая часть вектора Хаусхолдера.

Параметры
[in] k Индекс отражения Хаусхолдера
Возвращает
Вектор, содержащий нетривиальные элементы k-го вектора Хаусхолдера

Эта функция возвращает необходимую часть вектора Хаусхолдера \( v_i \). Это вектор длины \( n-i \), содержащий последние \( n-i \) элементы вектора

\[ v_i = [\underbrace{0, \ldots, 0}_{i-1\mbox{ нулей}}, 1, \underbrace{*, \ldots,*}_{n-i\mbox{ произвольных элементов}} ]. \]

Индекс \( i \) равен k + shift(), соответствующий k-му столбцу матрицы v , переданной в конструктор.

См. также
setShift(), shift()

operator*()

template<typename VectorsType , typename CoeffsType , int Side>
template<typename OtherDerived >
internal::matrix_type_times_scalar_type<Scalar, OtherDerived>::Type Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::operator* ( const MatrixBase< OtherDerived > & other ) const
inline

Вычисляет произведение последовательности Хаусхолдера на матрицу.

Параметры
[in] other Умножаемая матрица.
Возвращает
Объект выражения, представляющий произведение.

Эта функция вычисляет \( HM \), где \( H \) — последовательность Хаусхолдера, представленная *this, а \( M \) — матрица other.

rows()

template<typename VectorsType , typename CoeffsType , int Side>
EIGEN_CONSTEXPR Index Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::rows ( void ) const
inline

Количество строк преобразования, рассматриваемого как матрица.

Возвращает
Количество строк

Это равно размерности пространства, на котором действует преобразование.

setLength()

template<typename VectorsType , typename CoeffsType , int Side>
HouseholderSequence& Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::setLength ( Index length )
inline

Устанавливает длину последовательности Хаусхолдера.

Параметры
[in] length Новое значение для длины.

По умолчанию, длина \( n \) последовательности Хаусхолдера \( H = H_0 H_1 \ldots H_{n-1} \) устанавливается равной количеству столбцов матрицы v , переданной в конструктор, или количеству строк, если оно меньше. После вызова этой функции длина равна length.

См. также
length()

setShift()

template<typename VectorsType , typename CoeffsType , int Side>
HouseholderSequence& Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::setShift ( Index shift )
inline

Устанавливает сдвиг последовательности Хаусхолдера.

Параметры
[in] shift Новое значение для сдвига.

По умолчанию, объект HouseholderSequence представляет \( H = H_0 H_1 \ldots H_{n-1} \), и i-й столбец матрицы v , переданной в конструктор, соответствует i-му отражению Хаусхолдера. После вызова этой функции объект представляет \( H = H_{\mathrm{shift}} H_{\mathrm{shift}+1} \ldots H_{n-1} \), и i-й столбец v соответствует (shift+i)-му отражению Хаусхолдера.

См. также
shift()

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

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

Spec-Zone.ru

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