35#ifndef _BLAZE_MATH_DENSE_RQ_H_
36#define _BLAZE_MATH_DENSE_RQ_H_
75template<
typename MT1,
bool SO1,
typename MT2,
bool SO2,
typename MT3,
bool SO3 >
76void rq(
const DenseMatrix<MT1,SO1>& A, DenseMatrix<MT2,SO2>& R, DenseMatrix<MT3,SO3>& Q );
93template<
typename MT1 >
94inline auto rq_backend( MT1& A,
const ElementType_t<MT1>* tau )
95 -> EnableIf_t<IsBuiltin_v< ElementType_t<MT1> > >
115template<
typename MT1 >
116inline auto rq_backend( MT1& A,
const ElementType_t<MT1>* tau )
117 -> EnableIf_t<IsComplex_v< ElementType_t<MT1> > >
174template<
typename MT1
197 const size_t m( (*A).rows() );
198 const size_t n( (*A).columns() );
199 const size_t mindim(
min( m, n ) );
201 if( ( !IsResizable_v<MT2> && ( (*R).rows() != m || (*R).columns() != mindim ) ) ||
202 ( !IsResizable_v<MT3> && ( (*Q).rows() != mindim || (*Q).columns() != n ) ) ) {
206 if( IsSquare_v<MT2> && m != mindim ) {
210 const std::unique_ptr<ET1[]> tau(
new ET1[mindim] );
211 decltype(
auto) r( derestrict( *R ) );
216 gerqf( *Q, tau.get() );
218 resize( *R, m, m,
false );
221 for(
size_t i=0UL; i<m; ++i ) {
222 for(
size_t j=i; j<m; ++j ) {
223 r(i,j) = (*Q)(i,j+n-m);
227 rq_backend( *Q, tau.get() );
232 gerqf( r, tau.get() );
234 rq_backend( *Q, tau.get() );
236 for(
size_t i=m-n; i<m; ++i ) {
237 for(
size_t j=0UL; j<i+n-m; ++j ) {
Constraint on the data type.
Header file for auxiliary alias declarations.
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.
Definition: Aliases.h:190
Constraint on the data type.
Header file for the EnableIf class template.
Constraint on the data type.
Header file for the IsResizable type trait.
Header file for the IsSquare type trait.
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
Base class for dense matrices.
Definition: DenseMatrix.h:82
Header file for the DenseMatrix base class.
Header file for the LAPACK RQ decomposition functions (gerqf)
decltype(auto) min(const DenseMatrix< MT1, SO1 > &lhs, const DenseMatrix< MT2, SO2 > &rhs)
Computes the componentwise minimum of the dense matrices lhs and rhs.
Definition: DMatDMatMapExpr.h:1339
void rq(const DenseMatrix< MT1, SO1 > &A, DenseMatrix< MT2, SO2 > &R, DenseMatrix< MT3, SO3 > &Q)
RQ decomposition of the given dense matrix.
Definition: RQ.h:180
void orgrq(blas_int_t m, blas_int_t n, blas_int_t k, float *A, blas_int_t lda, const float *tau, float *work, blas_int_t lwork, blas_int_t *info)
LAPACK kernel for the reconstruction of the orthogonal matrix Q from a RQ decomposition.
Definition: orgrq.h:125
void gerqf(blas_int_t m, blas_int_t n, float *A, blas_int_t lda, float *tau, float *work, blas_int_t lwork, blas_int_t *info)
LAPACK kernel for the RQ decomposition of the given dense single precision column-major matrix.
Definition: gerqf.h:152
void ungrq(blas_int_t m, blas_int_t n, blas_int_t k, complex< float > *A, blas_int_t lda, const complex< float > *tau, complex< float > *work, blas_int_t lwork, blas_int_t *info)
LAPACK kernel for the reconstruction of the orthogonal matrix Q from a RQ decomposition.
Definition: ungrq.h:127
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Symmetric.h:79
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.
Definition: BLASCompatible.h:61
#define BLAZE_CONSTRAINT_MUST_NOT_BE_HERMITIAN_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Hermitian.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_STRICTLY_TRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.
Definition: StrictlyTriangular.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_ADAPTOR_TYPE(T)
Constraint on the data type.
Definition: Adaptor.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_LOWER_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Lower.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UNITRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.
Definition: UniTriangular.h:81
constexpr void reset(Matrix< MT, SO > &matrix)
Resetting the given matrix.
Definition: Matrix.h:806
void resize(Matrix< MT, SO > &matrix, size_t rows, size_t columns, bool preserve=true)
Changing the size of the matrix.
Definition: Matrix.h:1108
decltype(auto) submatrix(Matrix< MT, SO > &, RSAs...)
Creating a view on a specific submatrix of the given matrix.
Definition: Submatrix.h:181
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exception.
Definition: Exception.h:235
Header file for the exception macros of the math module.
Header file for the LAPACK functions to reconstruct Q from a RQ decomposition (orgrq)
Header file for the LAPACK functions to reconstruct Q from a RQ decomposition (ungrq)
Header file for the generic min algorithm.
Header file for the implementation of the Submatrix view.