11 #ifndef EIGEN_HOUSEHOLDER_SEQUENCE_H    12 #define EIGEN_HOUSEHOLDER_SEQUENCE_H    59 template<
typename VectorsType, 
typename CoeffsType, 
int S
ide>
    62   typedef typename VectorsType::Scalar 
Scalar;
    63   typedef typename VectorsType::Index 
Index;
    68     ColsAtCompileTime = RowsAtCompileTime,
    71     MaxColsAtCompileTime = MaxRowsAtCompileTime,
    76 template<
typename VectorsType, 
typename CoeffsType, 
int S
ide>
    81   typedef typename VectorsType::Index 
Index;
    82   static inline const EssentialVectorType 
essentialVector(
const HouseholderSequenceType& h, Index k)
    89 template<
typename VectorsType, 
typename CoeffsType>
    94   typedef typename VectorsType::Index 
Index;
    95   static inline const EssentialVectorType 
essentialVector(
const HouseholderSequenceType& h, Index k)
   106   typedef Matrix<
ResultScalar, MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime,
   107                  0, MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime> 
Type;
   113   : 
public EigenBase<HouseholderSequence<VectorsType,CoeffsType,Side> >
   125     typedef typename VectorsType::Index 
Index;
   131       typename internal::conditional<NumTraits<Scalar>::IsComplex,
   155       : m_vectors(v), m_coeffs(h), m_trans(false), m_length(v.diagonalSize()),
   162       : m_vectors(other.m_vectors),
   163         m_coeffs(other.m_coeffs),
   164         m_trans(other.m_trans),
   165         m_length(other.m_length),
   166         m_shift(other.m_shift)
   174     Index 
rows()
 const { 
return Side==
OnTheLeft ? m_vectors.rows() : m_vectors.cols(); }
   180     Index 
cols()
 const { 
return rows(); }
   227     template<
typename DestType> 
inline void evalTo(DestType& dst)
 const   229       Matrix<Scalar, DestType::RowsAtCompileTime, 1,
   231       evalTo(dst, workspace);
   235     template<
typename Dest, 
typename Workspace>
   236     void evalTo(Dest& dst, Workspace& workspace)
 const   238       workspace.resize(rows());
   239       Index vecs = m_length;
   244         dst.diagonal().setOnes();
   245         dst.template triangularView<StrictlyUpper>().
setZero();
   246         for(Index k = vecs-1; k >= 0; --k)
   248           Index cornerSize = rows() - k - m_shift;
   250             dst.bottomRightCorner(cornerSize, cornerSize)
   251                .applyHouseholderOnTheRight(essentialVector(k), m_coeffs.coeff(k), workspace.data());
   253             dst.bottomRightCorner(cornerSize, cornerSize)
   254                .applyHouseholderOnTheLeft(essentialVector(k), m_coeffs.coeff(k), workspace.data());
   257           dst.col(k).tail(rows()-k-1).setZero();
   260         for(Index k = 0; k<cols()-vecs ; ++k)
   261           dst.col(k).tail(rows()-k-1).setZero();
   265         dst.setIdentity(rows(), rows());
   266         for(Index k = vecs-1; k >= 0; --k)
   268           Index cornerSize = rows() - k - m_shift;
   270             dst.bottomRightCorner(cornerSize, cornerSize)
   271                .applyHouseholderOnTheRight(essentialVector(k), m_coeffs.coeff(k), &workspace.coeffRef(0));
   273             dst.bottomRightCorner(cornerSize, cornerSize)
   274                .applyHouseholderOnTheLeft(essentialVector(k), m_coeffs.coeff(k), &workspace.coeffRef(0));
   283       applyThisOnTheRight(dst, workspace);
   287     template<
typename Dest, 
typename Workspace>
   290       workspace.resize(dst.rows());
   291       for(Index k = 0; k < m_length; ++k)
   293         Index actual_k = m_trans ? m_length-k-1 : k;
   294         dst.rightCols(rows()-m_shift-actual_k)
   295            .applyHouseholderOnTheRight(essentialVector(actual_k), m_coeffs.coeff(actual_k), workspace.data());
   303       applyThisOnTheLeft(dst, workspace);
   307     template<
typename Dest, 
typename Workspace>
   310       workspace.resize(dst.cols());
   311       for(Index k = 0; k < m_length; ++k)
   313         Index actual_k = m_trans ? k : m_length-k-1;
   314         dst.bottomRows(rows()-m_shift-actual_k)
   315            .applyHouseholderOnTheLeft(essentialVector(actual_k), m_coeffs.coeff(actual_k), workspace.data());
   326     template<
typename OtherDerived>
   331       applyThisOnTheLeft(res);
   369     Index 
length()
 const { 
return m_length; }  
   370     Index 
shift()
 const { 
return m_shift; }    
   391     bool trans()
 const { 
return m_trans; }     
   408 template<
typename OtherDerived, 
typename VectorsType, 
typename CoeffsType, 
int S
ide>
   421 template<
typename VectorsType, 
typename CoeffsType>
   433 template<
typename VectorsType, 
typename CoeffsType>
   441 #endif // EIGEN_HOUSEHOLDER_SEQUENCE_H HouseholderSequence< VectorsType, CoeffsType, OnTheRight > HouseholderSequenceType
HouseholderSequence< VectorsType, CoeffsType > householderSequence(const VectorsType &v, const CoeffsType &h)
Convenience function for constructing a Householder sequence. 
Index length() const 
Returns the length of the Householder sequence. 
HouseholderSequence< typename internal::conditional< NumTraits< Scalar >::IsComplex, typename internal::remove_all< typename VectorsType::ConjugateReturnType >::type, VectorsType >::type, typename internal::conditional< NumTraits< Scalar >::IsComplex, typename internal::remove_all< typename CoeffsType::ConjugateReturnType >::type, CoeffsType >::type, Side > ConjugateReturnType
Matrix< ResultScalar, MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime, 0, MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime > Type
HouseholderSequence & setLength(Index length)
Sets the length of the Householder sequence. 
internal::hseq_side_dependent_impl< VectorsType, CoeffsType, Side >::EssentialVectorType EssentialVectorType
Index cols() const 
Number of columns of transformation viewed as a matrix. 
Expression of the transpose of a matrix. 
HouseholderSequence(const HouseholderSequence &other)
Copy constructor. 
void applyThisOnTheLeft(Dest &dst) const 
VectorsType::Scalar Scalar
HouseholderSequence(const VectorsType &v, const CoeffsType &h)
Constructor. 
const internal::permut_matrix_product_retval< PermutationDerived, Derived, OnTheRight > operator*(const MatrixBase< Derived > &matrix, const PermutationBase< PermutationDerived > &permutation)
HouseholderSequence transpose() const 
Transpose of the Householder sequence. 
Block< const VectorsType, Dynamic, 1 > EssentialVectorType
void applyThisOnTheRight(Dest &dst, Workspace &workspace) const 
Sequence of Householder reflections acting on subspaces with decreasing size. 
NewType cast(const OldType &x)
Transpose< Block< const VectorsType, 1, Dynamic > > EssentialVectorType
static const EssentialVectorType essentialVector(const HouseholderSequenceType &h, Index k)
HouseholderSequence< VectorsType, CoeffsType, OnTheRight > rightHouseholderSequence(const VectorsType &v, const CoeffsType &h)
Convenience function for constructing a Householder sequence. 
HouseholderSequence & setTrans(bool trans)
Sets the transpose flag. 
internal::matrix_type_times_scalar_type< Scalar, OtherDerived >::Type operator*(const MatrixBase< OtherDerived > &other) const 
Computes the product of a Householder sequence with a matrix. 
ConjugateReturnType conjugate() const 
Complex conjugate of the Householder sequence. 
VectorsType::Nested m_vectors
void applyThisOnTheLeft(Dest &dst, Workspace &workspace) const 
void evalTo(Dest &dst, Workspace &workspace) const 
CoeffsType::Nested m_coeffs
Index rows() const 
Number of rows of transformation viewed as a matrix. 
HouseholderSequence & setShift(Index shift)
Sets the shift of the Householder sequence. 
ConjugateReturnType conjugate() const 
void applyThisOnTheRight(Dest &dst) const 
VectorsType::StorageKind StorageKind
ConjugateReturnType adjoint() const 
Adjoint (conjugate transpose) of the Householder sequence. 
void evalTo(DestType &dst) const 
Expression of a fixed-size or dynamic-size block. 
ConjugateReturnType inverse() const 
Inverse of the Householder sequence (equals the adjoint). 
const EssentialVectorType essentialVector(Index k) const 
Essential part of a Householder vector. 
scalar_product_traits< OtherScalarType, typename MatrixType::Scalar >::ReturnType ResultScalar
bool trans() const 
Returns the transpose flag. 
internal::conditional< NumTraits< Scalar >::IsComplex, const CwiseUnaryOp< internal::scalar_conjugate_op< Scalar >, const Derived >, const Derived & >::type ConjugateReturnType
Index shift() const 
Returns the shift of the Householder sequence. 
const T::Scalar * extract_data(const T &m)
The matrix class, also used for vectors and row-vectors. 
HouseholderSequence< VectorsType, CoeffsType, OnTheLeft > HouseholderSequenceType
Base class for all dense matrices, vectors, and expressions. 
static const EssentialVectorType essentialVector(const HouseholderSequenceType &h, Index k)
internal::traits< HouseholderSequence >::Scalar Scalar