ModelSpace
All Classes Namespaces Functions Variables Enumerations Pages
clockwerk::Matrix< T, R, C > Class Template Reference

Matrix math implementation. More...

#include <Matrix.hpp>

Inheritance diagram for clockwerk::Matrix< T, R, C >:

Public Member Functions

 Matrix ()
 Default constructor to initialize a matrix to all zeroes for ease of use.
 
 Matrix (T elements)
 Constructor to initialize a matrix with all the same element.
 
 Matrix (const T(&initial)[R][C])
 Constructor for Matrix class with initialization. Initializes matrix to values passed in via array.
 
 Matrix (const Matrix< T, R, C > &initial)
 Copy constructor for Matrix class. Copies data from matrix object to the current instance.
 
 Matrix (const std::array< std::array< T, C >, R > &initial)
 Array constructor for the matrix class. Initializes from std::array.
 
 ~Matrix ()
 Destructor – doesn't do anything because we don't dynamically allocate.
 
void dump () const
 Function to dump information on matrix.
 
std::string str () const
 Function to dump information on matrix to string.
 
int set (const unsigned int &row, const unsigned int &col, const T &value)
 Function to set a single value in the matrix.
 
int get (const unsigned int &row, const unsigned int &col, T &result) const
 Function to get a single value in the matrix.
 
void setFromArray (const T *start_ptr)
 Function to set the values of the matrix row-wise.
 
void getAsArray (T *start_ptr) const
 Function to get the values of the matrix row-wise.
 
T get (const unsigned int &row, const unsigned int &col) const
 Function to get a single value in the matrix.
 
void getCopy (Matrix< T, R, C > &result) const
 Function to get a copy of the matrix.
 
Matrix< T, R, C > & operator= (const Matrix< T, R, C > &other)
 Equals operator overload for matrix.
 
Toperator[] (unsigned int idx)
 Function to return a matrix row or vector value.
 
std::pair< unsigned int, unsigned intsize ()
 Function to get the size of the matrix.
 
void max (T &result, std::pair< unsigned int, unsigned int > &index) const
 Function to return the maximum value in the matrix.
 
void min (T &result, std::pair< unsigned int, unsigned int > &index) const
 Function to return the minimum value in the matrix.
 
int det (T &result) const
 Function to return the determinant of the matrix.
 
int inverse (Matrix< T, R, C > &result) const
 Function to return the inverse of the matrix.
 
Matrix< T, R, Cinverse () const
 
void transpose (Matrix< T, C, R > &result) const
 Function to return the transpose of the matrix.
 
Matrix< T, C, R > transpose () const
 
int trace (T &result) const
 Function to return the trace of the matrix.
 
void setToZeros ()
 Function to set all elements of the matrix to zero.
 
int identity ()
 Function to set matrix to identity, if it is a square matrix.
 
int eye ()
 

Public Attributes

std::array< std::array< T, C >, R > values
 The actual values held by the matrix – a two dimensional array of values indexed as (row, column). NOTE: Public for ease of access and speed (no need to use setter/getter), and functions in Matrix and Safemath libraries are tested safe. Behavior using matrices outside of clockwerk libraries should use setter/getter, rather than direct access, for safety.
 

Protected Member Functions

int _checkLookupBoundaries (const unsigned int &start_r, const unsigned int &end_r, const unsigned int &start_c, const unsigned int &end_c) const
 Function to check, given a set of submatrix boundaries, that those boundaries are valid for the current matrix.
 
int _LUPDecompose (T *A[R], unsigned int P[R+1]) const
 Function to take a 2-d matrix represented by A and decompose it into LU form.
 

Detailed Description

template<typename T, unsigned int R, unsigned int C>
class clockwerk::Matrix< T, R, C >

Matrix math implementation.

This file defines a base class for computational matrix math. It is designed for use in real-time, embedded mode or with simulation. As such, it contains certain limitations on dynamic allocation to make it real-time compliant.

Note: The naming convention observed for matrix math is as follows:

  • Capital letters represent matrices
  • Lowercase letters represent scalars
  • All vectors are 1-dimensional matrices for the purpose of math
  • Pass by reference return values are all named "result"
  • The letter used in math indicates the order of operations - A/a comes first, then B/b. A/a or B/b always represent the "other" value in an operation

Important: The matrix class is templated such that it can be used with a generic type T, but should only be used on native types, as other implementations could result in undefined behavior.

TODO: Flattening and flattened constructor

Member Function Documentation

◆ _LUPDecompose()

template<typename T , unsigned int R, unsigned int C>
int clockwerk::Matrix< T, R, C >::_LUPDecompose ( T A[R],
unsigned int  P[R+1] 
) const
protected

Function to take a 2-d matrix represented by A and decompose it into LU form.

Parameters
AA 2-d matrix represented as a double pointer After ops A contains a copy of both matrices L-E and U as A=(L-E)+U such that P*A=L*U.
PThe permutation matrix to hold info on matrix changes
Returns
Error code corresponding to codes in clockwerkerrors.h
Note
Code borrowed/updated from sample C code on wikipedia here: https://en.wikipedia.org/wiki/LU_decomposition

◆ det()

template<typename T , unsigned int R, unsigned int C>
int clockwerk::Matrix< T, R, C >::det ( T result) const

Function to return the determinant of the matrix.


Operations to return important matrix information

Returns
Integer value corresponding to error codes in clockwerkerrrors.h

◆ get() [1/2]

template<typename T , unsigned int R, unsigned int C>
T clockwerk::Matrix< T, R, C >::get ( const unsigned int row,
const unsigned int col 
) const

Function to get a single value in the matrix.

Parameters
rowThe row index
colThe column index
Returns
Matrix value at index
Note
Does not bounds check and is unsafe for embedded operations

◆ get() [2/2]

template<typename T , unsigned int R, unsigned int C>
int clockwerk::Matrix< T, R, C >::get ( const unsigned int row,
const unsigned int col,
T result 
) const

Function to get a single value in the matrix.

Parameters
rowThe row index
colThe column index
valuePBR return of the value in the matrix
Returns
Integer value corresponding to error codes in clockwerkerrrors.h

◆ getAsArray()

template<typename T , unsigned int R, unsigned int C>
void clockwerk::Matrix< T, R, C >::getAsArray ( T start_ptr) const

Function to get the values of the matrix row-wise.

Parameters
start_ptrThe data address at which write should begin.
Note
start_ptr must represent an array or similar type of at least R*C values
Not protected. May segfault if not used properly
The matrix [1 2; 3 4] would output as an array [1 2 3 4]

◆ getCopy()

template<typename T , unsigned int R, unsigned int C>
void clockwerk::Matrix< T, R, C >::getCopy ( Matrix< T, R, C > &  result) const

Function to get a copy of the matrix.

Parameters
resultPBR return of a copy of this matrix

◆ identity()

template<typename T , unsigned int R, unsigned int C>
int clockwerk::Matrix< T, R, C >::identity ( )

Function to set matrix to identity, if it is a square matrix.

Returns
Error code corresponding to success/failure

◆ inverse()

template<typename T , unsigned int R, unsigned int C>
int clockwerk::Matrix< T, R, C >::inverse ( Matrix< T, R, C > &  result) const

Function to return the inverse of the matrix.

Parameters
resultPBR return of matrix inverse
Returns
Integer value corresponding to error codes in clockwerkerrrors.h

◆ max()

template<typename T , unsigned int R, unsigned int C>
void clockwerk::Matrix< T, R, C >::max ( T result,
std::pair< unsigned int, unsigned int > &  index 
) const

Function to return the maximum value in the matrix.

Parameters
resultPBR return of maximum value

◆ min()

template<typename T , unsigned int R, unsigned int C>
void clockwerk::Matrix< T, R, C >::min ( T result,
std::pair< unsigned int, unsigned int > &  index 
) const

Function to return the minimum value in the matrix.

Parameters
resultPBR return of minimum value

◆ operator[]()

template<typename T , unsigned int R, unsigned int C>
T * clockwerk::Matrix< T, R, C >::operator[] ( unsigned int  idx)

Function to return a matrix row or vector value.

Parameters
idxThe row index to return
Returns
A pointer to the row element of the matrix. Nullptr if out of range

◆ set()

template<typename T , unsigned int R, unsigned int C>
int clockwerk::Matrix< T, R, C >::set ( const unsigned int row,
const unsigned int col,
const T value 
)

Function to set a single value in the matrix.


Getters and setters

Parameters
rowThe row index
colThe column index
valueThe value to set the matrix to
Returns
Integer value corresponding to error codes in clockwerkerrrors.h

◆ setFromArray()

template<typename T , unsigned int R, unsigned int C>
void clockwerk::Matrix< T, R, C >::setFromArray ( const T start_ptr)

Function to set the values of the matrix row-wise.

Parameters
start_ptrThe data address at which read should begin.
Note
start_ptr must represent an array or similar type of at least R*C values
Not protected. May segfault if not used properly
The array [1 2 3 4] would read into a matrix as [1 2; 3 4]

◆ size()

template<typename T , unsigned int R, unsigned int C>
std::pair< unsigned int, unsigned int > clockwerk::Matrix< T, R, C >::size ( )
inline

Function to get the size of the matrix.


Operations to get matrix info

◆ trace()

template<typename T , unsigned int R, unsigned int C>
int clockwerk::Matrix< T, R, C >::trace ( T result) const

Function to return the trace of the matrix.

Parameters
resultPBR return of matrix trace
Returns
Integer value corresponding to error codes in clockwerkerrrors.h

◆ transpose()

template<typename T , unsigned int R, unsigned int C>
void clockwerk::Matrix< T, R, C >::transpose ( Matrix< T, C, R > &  result) const

Function to return the transpose of the matrix.

Parameters
resultPBR return of matrix transpose
Note
Overloaded for return as well

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