Public Types | Static Public Member Functions | List of all members
lar::util::details::FastMatrixOperations< T, DIM > Struct Template Reference

Provides "fast" matrix operations. More...

#include <FastMatrixMathHelper.h>

Inheritance diagram for lar::util::details::FastMatrixOperations< T, DIM >:
lar::util::details::FastMatrixOperationsBase< T, DIM >

Public Types

using Base_t = FastMatrixOperationsBase< T, DIM >
 
using Data_t = typename Base_t::Data_t
 
using Matrix_t = typename Base_t::Matrix_t
 
- Public Types inherited from lar::util::details::FastMatrixOperationsBase< T, DIM >
using Data_t = T
 
using Matrix_t = std::array< Data_t, Dim *Dim >
 
using Vector_t = std::array< Data_t, Dim >
 

Static Public Member Functions

static Data_t Determinant (Matrix_t const &mat)
 Computes the determinant of a matrix. More...
 
static Matrix_t InvertMatrix (Matrix_t const &mat, Data_t det)
 Computes the determinant of a matrix, using the provided determinant. More...
 
static Matrix_t InvertSymmetricMatrix (Matrix_t const &mat, Data_t det)
 
static Matrix_t InvertMatrix (Matrix_t const &mat)
 Computes the determinant of a matrix. More...
 
static Matrix_t InvertSymmetricMatrix (Matrix_t const &mat)
 Computes the determinant of a matrix. More...
 
- Static Public Member Functions inherited from lar::util::details::FastMatrixOperationsBase< T, DIM >
static Vector_t MatrixVectorProduct (Matrix_t const &mat, Vector_t const &vec)
 Returns the product of a square matrix times a column vector. More...
 
static constexpr Data_t sqr (Data_t v)
 

Additional Inherited Members

- Static Public Attributes inherited from lar::util::details::FastMatrixOperationsBase< T, DIM >
static constexpr unsigned int Dim = DIM
 matrix dimensions More...
 

Detailed Description

template<typename T, unsigned int DIM>
struct lar::util::details::FastMatrixOperations< T, DIM >

Provides "fast" matrix operations.

Template Parameters
Tdata type for the elements of the matrix
DIMthe dimension of the (square) matrix

Actually this class does nothing: specialize it!

Once the specialization is in place, this class offers:

constexpr unsigned int Dim = 2;
std::array<float, Dim*Dim> matrix;

float det = FastMatrixOperations<float, Dim>::Determinant();

std::array<float, Dim*Dim> inverse;

// generic inversion
inverse = FastMatrixOperations<float, Dim>::InvertMatrix(matrix);

// faster inversion if we already have the determinant
inverse = FastMatrixOperations<float, Dim>::InvertMatrix
  (matrix, det);

// faster inversion if we know the matrix is symmetric
inverse = FastMatrixOperations<float, Dim>::InvertSymmetricMatrix
  (matrix);

// even faster inversion if we also know the determinant already
inverse = FastMatrixOperations<float, Dim>::InvertSymmetricMatrix
  (matrix, det);

Note that the inversion functions do not have a defined policy for non-invertible matrices. If you need to check (and you usually do), compute the determinant first, and invert only if std::isnormal(det).

Definition at line 87 of file FastMatrixMathHelper.h.

Member Typedef Documentation

template<typename T , unsigned int DIM>
using lar::util::details::FastMatrixOperations< T, DIM >::Base_t = FastMatrixOperationsBase<T, DIM>

Definition at line 88 of file FastMatrixMathHelper.h.

template<typename T , unsigned int DIM>
using lar::util::details::FastMatrixOperations< T, DIM >::Data_t = typename Base_t::Data_t

Definition at line 89 of file FastMatrixMathHelper.h.

template<typename T , unsigned int DIM>
using lar::util::details::FastMatrixOperations< T, DIM >::Matrix_t = typename Base_t::Matrix_t

Definition at line 90 of file FastMatrixMathHelper.h.

Member Function Documentation

template<typename T , unsigned int DIM>
static Data_t lar::util::details::FastMatrixOperations< T, DIM >::Determinant ( Matrix_t const &  mat)
static

Computes the determinant of a matrix.

template<typename T , unsigned int DIM>
static Matrix_t lar::util::details::FastMatrixOperations< T, DIM >::InvertMatrix ( Matrix_t const &  mat,
Data_t  det 
)
static

Computes the determinant of a matrix, using the provided determinant.

template<typename T , unsigned int DIM>
static Matrix_t lar::util::details::FastMatrixOperations< T, DIM >::InvertMatrix ( Matrix_t const &  mat)
inlinestatic

Computes the determinant of a matrix.

Definition at line 103 of file FastMatrixMathHelper.h.

104  { return InvertMatrix(mat, Determinant(mat)); }
static Data_t Determinant(Matrix_t const &mat)
Computes the determinant of a matrix.
static Matrix_t InvertMatrix(Matrix_t const &mat, Data_t det)
Computes the determinant of a matrix, using the provided determinant.
template<typename T , unsigned int DIM>
static Matrix_t lar::util::details::FastMatrixOperations< T, DIM >::InvertSymmetricMatrix ( Matrix_t const &  mat,
Data_t  det 
)
static

Computes the determinant of a symmatric matrix, using the provided determinant

template<typename T , unsigned int DIM>
static Matrix_t lar::util::details::FastMatrixOperations< T, DIM >::InvertSymmetricMatrix ( Matrix_t const &  mat)
inlinestatic

Computes the determinant of a matrix.

Definition at line 107 of file FastMatrixMathHelper.h.

108  { return InvertSymmetricMatrix(mat, Determinant(mat)); }
static Data_t Determinant(Matrix_t const &mat)
Computes the determinant of a matrix.
static Matrix_t InvertSymmetricMatrix(Matrix_t const &mat, Data_t det)

The documentation for this struct was generated from the following file: