LLH.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_DENSE_LLH_H_
36 #define _BLAZE_MATH_DENSE_LLH_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
54 #include <blaze/util/Exception.h>
55 
56 
57 namespace blaze {
58 
59 //=================================================================================================
60 //
61 // LLH DECOMPOSITION FUNCTIONS
62 //
63 //=================================================================================================
64 
65 //*************************************************************************************************
68 template< typename MT1, bool SO1, typename MT2, bool SO2 >
69 void llh( const DenseMatrix<MT1,SO1>& A, DenseMatrix<MT2,SO2>& L );
71 //*************************************************************************************************
72 
73 
74 //*************************************************************************************************
123 template< typename MT1 // Type of matrix A
124  , bool SO1 // Storage order of matrix A
125  , typename MT2 // Type of matrix L
126  , bool SO2 > // Storage order of matrix L
128 {
131 
137 
138  if( !isSquare( ~A ) ) {
139  BLAZE_THROW_INVALID_ARGUMENT( "Invalid non-square matrix provided" );
140  }
141 
142  const size_t n( (~A).rows() );
143 
144  if( ( !IsResizable<MT2>::value && ( (~L).rows() != n || (~L).columns() != n ) ) ) {
145  BLAZE_THROW_INVALID_ARGUMENT( "Dimensions of fixed size matrix do not match" );
146  }
147 
148  typename DerestrictTrait<MT2>::Type l( derestrict( ~L ) );
149 
150  resize( ~L, n, n );
151  reset( l );
152 
154  for( size_t i=0UL; i<n; ++i ) {
155  for( size_t j=0UL; j<=i; ++j ) {
156  l(i,j) = (~A)(i,j);
157  }
158  }
159  }
160  else {
161  for( size_t j=0UL; j<n; ++j ) {
162  for( size_t i=j; i<n; ++i ) {
163  l(i,j) = (~A)(i,j);
164  }
165  }
166  }
167 
168  potrf( l, 'L' );
169 }
170 //*************************************************************************************************
171 
172 } // namespace blaze
173 
174 #endif
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exceptionThis macro encapsulates the default way of...
Definition: Exception.h:187
BLAZE_ALWAYS_INLINE bool isSquare(const Matrix< MT, SO > &matrix)
Checks if the given matrix is a square matrix.
Definition: Matrix.h:603
Header file for the LAPACK Cholesky decomposition functions (potrf)
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:507
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix)
Returns the current number of rows of the matrix.
Definition: Matrix.h:308
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UNITRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a lower or upper unitriangular matrix ty...
Definition: UniTriangular.h:118
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:70
Constraint on the data type.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Compile time check for row-major matrix types.This type trait tests whether or not the given template...
Definition: IsRowMajorMatrix.h:110
Header file for the DenseMatrix base class.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UPPER_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a upper triangular matrix type...
Definition: Upper.h:118
BLAZE_ALWAYS_INLINE void resize(Matrix< MT, SO > &matrix, size_t rows, size_t columns, bool preserve=true)
Changing the size of the matrix.
Definition: Matrix.h:532
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Constraint on the data type.
Header file for the DerestrictTrait class template.
Constraint on the data type.
Compile time check for resizable data types.This type trait tests whether the given data type is a re...
Definition: IsResizable.h:75
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a symmetric matrix type, a compilation error is created.
Definition: Symmetric.h:116
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.In case the given data type T is not a BLAS compatible data type (i...
Definition: BlasCompatible.h:79
Constraint on the data type.
Evaluation of the return type of the derestrict function.Via this type trait it is possible to evalua...
Definition: DerestrictTrait.h:74
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_STRICTLY_TRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a strictly lower or upper triangular mat...
Definition: StrictlyTriangular.h:118
Header file for the IsRowMajorMatrix type trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix)
Returns the current number of columns of the matrix.
Definition: Matrix.h:324
#define BLAZE_CONSTRAINT_MUST_NOT_BE_HERMITIAN_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is an Hermitian matrix type, a compilation error is created.
Definition: Hermitian.h:116
void potrf(char uplo, int n, float *A, int lda, int *info)
LAPACK kernel for the Cholesky decomposition of the given dense positive definite single precision co...
Definition: potrf.h:140
Header file for exception macros.
Header file for the IsResizable type trait.
void llh(const DenseMatrix< MT1, SO1 > &A, DenseMatrix< MT2, SO2 > &L)
Cholesky (LLH) decomposition of the given dense matrix.
Definition: LLH.h:127