Provides "fast" matrix operations. More...
#include <FastMatrixMathHelper.h>
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... | |
Provides "fast" matrix operations.
T | data type for the elements of the matrix |
DIM | the 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.
using lar::util::details::FastMatrixOperations< T, DIM >::Base_t = FastMatrixOperationsBase<T, DIM> |
Definition at line 88 of file FastMatrixMathHelper.h.
using lar::util::details::FastMatrixOperations< T, DIM >::Data_t = typename Base_t::Data_t |
Definition at line 89 of file FastMatrixMathHelper.h.
using lar::util::details::FastMatrixOperations< T, DIM >::Matrix_t = typename Base_t::Matrix_t |
Definition at line 90 of file FastMatrixMathHelper.h.
|
static |
Computes the determinant of a matrix.
|
static |
Computes the determinant of a matrix, using the provided determinant.
|
inlinestatic |
Computes the determinant of a matrix.
Definition at line 103 of file FastMatrixMathHelper.h.
|
static |
Computes the determinant of a symmatric matrix, using the provided determinant
|
inlinestatic |
Computes the determinant of a matrix.
Definition at line 107 of file FastMatrixMathHelper.h.