Ravelin
Public Member Functions | Static Public Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
MATRIXN Class Reference

A generic, possibly non-square matrix. More...

#include <MatrixN.h>

Public Member Functions

 MATRIXN ()
 Default constructor - constructs an empty matrix.
 
 MATRIXN (unsigned rows, unsigned columns)
 Constructs a rows x columns dimensional (unitialized) matrix.
 
 MATRIXN (unsigned rows, unsigned columns, const REAL *array)
 Constructs a matrix from an array. More...
 
 MATRIXN (const VECTORN &v, Transposition trans=eNoTranspose)
 Constructs a matrix from a vector. More...
 
 MATRIXN (const SHAREDVECTORN &v, Transposition trans=eNoTranspose)
 Constructs a matrix from a vector. More...
 
 MATRIXN (const CONST_SHAREDVECTORN &v, Transposition trans=eNoTranspose)
 Constructs a matrix from a vector. More...
 
 MATRIXN (const MATRIX2 &m)
 
 MATRIXN (const MATRIX3 &m)
 Constructs a matrix from a MATRIX3.
 
 MATRIXN (const MATRIXN &m)
 Constructs a matrix from a pose. More...
 
 MATRIXN (const SHAREDMATRIXN &m)
 Copy constructor.
 
 MATRIXN (const CONST_SHAREDMATRIXN &m)
 Copy constructor.
 
MATRIXNset_identity ()
 Sets this matrix to the identity matrix.
 
MATRIXNset_identity (unsigned sz)
 Sets this matrix to the identity matrix.
 
bool is_symmetric (REAL tolerance=-1.0) const
 Checks whether the given matrix is symmetric to the specified tolerance.
 
REAL norm_inf () const
 
MATRIXNzero_upper_triangle ()
 Zeros the upper triangle of the matrix.
 
MATRIXNzero_lower_triangle ()
 Zeros the lower triangle of the matrix.
 
MATRIXNset (const VECTORN &v, Transposition trans=eNoTranspose)
 Sets this matrix from a vector.
 
MATRIXNset (const SHAREDVECTORN &v, Transposition trans=eNoTranspose)
 Sets this matrix from a vector.
 
MATRIXNset (const CONST_SHAREDVECTORN &v, Transposition trans=eNoTranspose)
 Sets this matrix from a vector.
 
unsigned rows () const
 
unsigned columns () const
 
virtual MATRIXNresize (unsigned rows, unsigned columns, bool preserve=false)
 Resizes this matrix, optionally preserving its existing elements. More...
 
MATRIXNremove_row (unsigned i)
 Removes a row from the matrix. More...
 
MATRIXNremove_column (unsigned i)
 Removes a column from the matrix. More...
 
MATRIXNnegate ()
 Negates this matrix in place.
 
MATRIXNset_zero ()
 Sets the matrix to the zero matrix.
 
virtual MATRIXNtranspose ()
 Sets this matrix to its transpose.
 
virtual MATRIXNoperator= (const MATRIXN &source)
 Sets this to m.
 
MATRIXNoperator= (const MATRIX2 &source)
 Sets a matrix from a MATRIX2.
 
MATRIXNoperator= (const MATRIX3 &source)
 Sets a matrix from a MATRIX3.
 
MATRIXNoperator= (const SHAREDMATRIXN &source)
 Sets this to m.
 
MATRIXNoperator= (const CONST_SHAREDMATRIXN &source)
 Sets this to m.
 
MATRIXNoperator= (const VECTORN &v)
 
MATRIXNoperator= (const SHAREDVECTORN &v)
 
MATRIXNoperator= (const CONST_SHAREDVECTORN &v)
 
MATRIXNoperator+= (const MATRIXN &m)
 Adds m to this.
 
MATRIXNoperator-= (const MATRIXN &m)
 Subtracts m from this.
 
MATRIXNoperator/= (REAL scalar)
 Divides this matrix by a scalar in place.
 
MATRIXNoperator*= (REAL scalar)
 Multiplies this matrix by another in place.
 
REAL * data ()
 
const REAL * data () const
 
void free_memory ()
 
void compress ()
 
unsigned leading_dim () const
 
unsigned inc () const
 
unsigned size () const
 Gets the total number of elements in this matrix.
 
const REAL & operator() (unsigned i, unsigned j) const
 Gets the desired entry.
 
REAL & operator() (const unsigned i, const unsigned j)
 Gets the desired entry.
 
CONST_COLUMN_ITERATOR block_column_iterator_begin (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end) const
 This file consists of general routines for constant matrices. More...
 
CONST_COLUMN_ITERATOR block_column_iterator_end (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end) const
 Gets a column iterator to a block.
 
CONST_ROW_ITERATOR block_row_iterator_begin (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end) const
 Gets a row iterator to a block.
 
CONST_ROW_ITERATOR block_row_iterator_end (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end) const
 Gets a row iterator to a block.
 
template<class V >
V & get_row (unsigned row, V &v) const
 
template<class V >
V & get_column (unsigned column, V &v) const
 
template<class T , class U >
U & transpose_mult_transpose (const T &x, U &y, REAL alpha=(REAL) 1.0, REAL beta=(REAL) 0.0) const
 Does the operation y = beta*y + alpha*this'*x'.
 
template<class T , class U >
U & mult_transpose (const T &x, U &y, REAL alpha=(REAL) 1.0, REAL beta=(REAL) 0.0) const
 Does the operation y = beta*y + alpha*this*x'.
 
template<class T , class U >
U & transpose_mult (const T &x, U &y, REAL alpha=(REAL) 1.0, REAL beta=(REAL) 0.0) const
 Does the operation y = beta*y + alpha*this'*x.
 
template<class T , class U >
U & mult (const T &x, U &y, REAL alpha=(REAL) 1.0, REAL beta=(REAL) 0.0) const
 Does the operation y = beta*y + alpha*this*x.
 
template<class M >
M & get_sub_mat (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end, M &m, Transposition trans=eNoTranspose) const
 Gets the specified sub matrix. More...
 
template<class ForwardIterator , class M >
M & select_columns (ForwardIterator col_start, ForwardIterator col_end, M &m) const
 Gets a submatrix of columns (not necessarily a block) More...
 
template<class M >
M & select_columns (std::vector< bool > &col_select, M &m) const
 Gets a submatrix of columns (not necessarily a block) More...
 
template<class ForwardIterator , class M >
M & select_rows (ForwardIterator row_start, ForwardIterator row_end, M &m) const
 Gets a submatrix of rows (not necessarily a block) More...
 
template<class M >
M & select_rows (std::vector< bool > &row_select, M &m) const
 Gets a submatrix of rows (not necessarily a block) More...
 
template<class ForwardIterator1 , class ForwardIterator2 , class X >
X & select (ForwardIterator1 row_start, ForwardIterator1 row_end, ForwardIterator2 col_start, ForwardIterator2 col_end, X &m) const
 Gets a submatrix (not necessarily a block) More...
 
template<class X >
X & select (const std::vector< bool > &rows, const std::vector< bool > &cols, X &m) const
 Gets a submatrix (not necessarily a block)
 
template<class M >
M & select_square (const std::vector< bool > &indices, M &result) const
 Gets a square submatrix (not necessarily a block)
 
template<class ForwardIterator , class M >
M & select_square (ForwardIterator start, ForwardIterator end, M &m) const
 
CONST_COLUMN_ITERATOR column_iterator_begin () const
 Get an iterator to the beginning.
 
CONST_COLUMN_ITERATOR column_iterator_end () const
 Get an iterator to the end.
 
CONST_ROW_ITERATOR row_iterator_begin () const
 Get an iterator to the beginning.
 
CONST_ROW_ITERATOR row_iterator_end () const
 Get an iterator to the end.
 
COLUMN_ITERATOR block_column_iterator_begin (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end)
 Gets a column iterator to a block.
 
COLUMN_ITERATOR block_column_iterator_end (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end)
 Gets a column iterator to a block.
 
ROW_ITERATOR block_row_iterator_begin (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end)
 Gets a row iterator to a block.
 
ROW_ITERATOR block_row_iterator_end (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end)
 Gets a row iterator to a block.
 
template<class V >
MATRIXX & set_row (unsigned row, const V &v)
 
template<class V >
MATRIXX & set_column (unsigned column, const V &v)
 
template<class M >
MATRIXX & set_sub_mat (unsigned row_start, unsigned col_start, const M &m, Transposition trans=eNoTranspose)
 Sets the specified sub matrix. More...
 
ROW_ITERATOR row_iterator_begin ()
 Get an iterator to the beginning (iterates column by column)
 
ROW_ITERATOR row_iterator_end ()
 Get an iterator to the end.
 
COLUMN_ITERATOR column_iterator_begin ()
 Get an iterator to the beginning (iterates column by column)
 
COLUMN_ITERATOR column_iterator_end ()
 Get an iterator to the end.
 
CONST_SHAREDVECTORN row (unsigned i) const
 Gets the specified sub matrix. More...
 
CONST_SHAREDVECTORN column (unsigned i) const
 Gets a shared vector for a column.
 
CONST_SHAREDMATRIXN block (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end) const
 Gets a block as a constant shared matrix.
 
SHAREDVECTORN row (unsigned i)
 Gets a shared vector for a row.
 
SHAREDVECTORN column (unsigned i)
 Gets a shared vector for a column.
 
SHAREDMATRIXN block (unsigned row_start, unsigned row_end, unsigned col_start, unsigned col_end)
 Gets a block as a shared matrix.
 
template<class V >
XMATRIXN & set (const V &v, Transposition trans)
 Sets a matrix from a vector.
 
template<class M >
XMATRIXN & operator+= (const M &m)
 Adds m to *this in place.
 
template<class M >
XMATRIXN & operator-= (const M &m)
 Subtracts m from *this in place.
 
XMATRIXN & set_zero (unsigned m, unsigned n)
 Sets this to a m x n sized zero matrix.
 

Static Public Member Functions

static MATRIXN identity (unsigned dim)
 Returns an identity matrix.
 
static MATRIXN construct_variable (unsigned rows, unsigned cols,...)
 Constructs a MATRIXN using a variable number of double values. More...
 
static MATRIXN zero (unsigned rows, unsigned columns)
 
static MATRIXNmult (const MATRIXN &m1, const MATRIXN &m2, MATRIXN &result)
 
template<class V , class U , class W >
static W & diag_mult (const V &d, const U &v, W &result)
 Determines the transpose of a matrix and stores the result in a given matrix. More...
 
template<class M >
static M & transpose (const XMATRIXN &m, M &result)
 Determines the transpose of a matrix and stores the result in a given matrix.
 
template<class V , class W >
static W & diag_mult (const V &d, const XMATRIXN &m, W &result)
 Multiplies the diagonal matrix formed from d by the matrix m.
 
template<class V , class W >
static W & diag_mult_transpose (const V &d, const XMATRIXN &m, W &result)
 Multiplies the diagonal matrix formed from d by the matrix transpose(m)
 

Protected Attributes

SharedResizable< REAL > _data
 
unsigned _rows
 
unsigned _columns
 

Static Protected Attributes

static FastThreadable< MATRIXN_n
 
static FastThreadable< VECTORN_workv
 

Friends

class SHAREDMATRIXN
 

Detailed Description

A generic, possibly non-square matrix.

The underlying data is stored in column-major format (e.g., the element at row 1, column 0 is the second element in the flat array).

Constructor & Destructor Documentation

MATRIXN::MATRIXN ( unsigned  rows,
unsigned  columns,
const REAL *  array 
)

Constructs a matrix from an array.

Parameters
rowsthe number of rows of the matrix
columnsthe number of columns of the matrix
arrayan array of rows*columns REAL values in column-major format

References resize().

MATRIXN::MATRIXN ( const VECTORN v,
Transposition  trans = eNoTranspose 
)

Constructs a matrix from a vector.

Parameters
vthe vector
determineswhether the vector will be transposed

References set().

MATRIXN::MATRIXN ( const SHAREDVECTORN v,
Transposition  trans = eNoTranspose 
)

Constructs a matrix from a vector.

Parameters
vthe vector
determineswhether the vector will be transposed

References set().

MATRIXN::MATRIXN ( const CONST_SHAREDVECTORN v,
Transposition  trans = eNoTranspose 
)

Constructs a matrix from a vector.

Parameters
vthe vector
determineswhether the vector will be transposed

References set().

MATRIXN::MATRIXN ( const MATRIXN source)

Constructs a matrix from a pose.

Copy constructor

References operator=().

Member Function Documentation

CONST_COLUMN_ITERATOR MATRIXN::block_column_iterator_begin ( unsigned  row_start,
unsigned  row_end,
unsigned  col_start,
unsigned  col_end 
) const
inline

This file consists of general routines for constant matrices.

Gets a column iterator to a block

MATRIXN MATRIXN::construct_variable ( unsigned  rows,
unsigned  cols,
  ... 
)
static

Constructs a MATRIXN using a variable number of double values.

Note
the values are given row by row
There is no means in C++ to check the types of a list of variable arguments. If the variable arguments are not of type double, then unexpected values will result. Constructing a matrix using the statement MATRIXN::construct_variable(2, 2, 1.0, 1.0, 1.0, 0) is incorrect because the programmer has assumed that the integer 0 will be converted to a double type; this is not the case.
template<class V , class U , class W >
static W& MATRIXN::diag_mult ( const V &  d,
const U &  v,
W &  result 
)
inlinestatic

Determines the transpose of a matrix and stores the result in a given matrix.

Multiplies the diagonal matrix formed from d by the vector v

template<class M >
M& MATRIXN::get_sub_mat ( unsigned  row_start,
unsigned  row_end,
unsigned  col_start,
unsigned  col_end,
M &  m,
Transposition  trans = eNoTranspose 
) const
inline

Gets the specified sub matrix.

Parameters
row_startthe row to start (inclusive)
row_endthe row to end (exclusive)
col_startthe column to start (inclusive)
col_endthe column to end (exclusive)
transposedetermines whether to store the transpose of the submatrix into m
Returns
a (row_end - row_start) x (col_end - col_start) sized matrix
MATRIXN & MATRIXN::remove_column ( unsigned  i)

Removes a column from the matrix.

Note
downsizes the matrix – does not reallocate memory
MATRIXN & MATRIXN::remove_row ( unsigned  i)

Removes a row from the matrix.

Note
reallocates memory

References block().

MATRIXN & MATRIXN::resize ( unsigned  rows,
unsigned  columns,
bool  preserve = false 
)
virtual
CONST_SHAREDVECTORN MATRIXN::row ( unsigned  i) const
inline

Gets the specified sub matrix.

Parameters
row_startthe row to start (inclusive)
row_endthe row to end (exclusive)
col_startthe column to start (inclusive)
col_endthe column to end (exclusive)
transposedetermines whether to store the transpose of the submatrix into m
Returns
a (row_end - row_start) x (col_end - col_start) sized matrixGets a constant shared vector for a row

Referenced by PLANARJOINT::calc_constraint_jacobian(), REVOLUTEJOINT::calc_constraint_jacobian(), and FSAB_ALGORITHM::calc_inverse_generalized_inertia_noprecalc().

template<class ForwardIterator1 , class ForwardIterator2 , class X >
X& MATRIXN::select ( ForwardIterator1  row_start,
ForwardIterator1  row_end,
ForwardIterator2  col_start,
ForwardIterator2  col_end,
X &  m 
) const
inline

Gets a submatrix (not necessarily a block)

Parameters
row_startan iterator pointing to the beginning of a container of row indices (container need not be sorted)
row_endan iterator pointing to the end of a container of row indices (container need not be sorted)
col_startan iterator pointing to the beginning of a container of column indices (container need not be sorted)
col_endan iterator pointing to the end of a container of column indices (container need not be sorted)
Mcontains the submatrix on return
template<class ForwardIterator , class M >
M& MATRIXN::select_columns ( ForwardIterator  col_start,
ForwardIterator  col_end,
M &  m 
) const
inline

Gets a submatrix of columns (not necessarily a block)

Parameters
col_startan iterator pointing to the beginning of a container of column indices (container need not be sorted)
col_endan iterator pointing to the end of a container of column indices (container need not be sorted)
Mcontains the submatrix on return
template<class M >
M& MATRIXN::select_columns ( std::vector< bool > &  col_select,
M &  m 
) const
inline

Gets a submatrix of columns (not necessarily a block)

Parameters
col_selecta vector of bools; if the entry is true in the vector, the column is selected
Mcontains the submatrix on return
template<class ForwardIterator , class M >
M& MATRIXN::select_rows ( ForwardIterator  row_start,
ForwardIterator  row_end,
M &  m 
) const
inline

Gets a submatrix of rows (not necessarily a block)

Parameters
row_startan iterator pointing to the beginning of a container of row indices (container need not be sorted)
row_endan iterator pointing to the end of a container of row indices (container need not be sorted)
Mcontains the submatrix on return
template<class M >
M& MATRIXN::select_rows ( std::vector< bool > &  row_select,
M &  m 
) const
inline

Gets a submatrix of rows (not necessarily a block)

Parameters
row_selecta vector of bools; if the entry is true in the vector, the row is selected
Mcontains the submatrix on return
template<class ForwardIterator , class M >
M& MATRIXN::select_square ( ForwardIterator  start,
ForwardIterator  end,
M &  m 
) const
inline
Parameters
startan iterator pointing to the beginning of a container of row/column indices (container need not be sorted)
endan iterator pointing to the end of a container of row/column indices (container need not be sorted)
Mcontains the submatrix on return
template<class M >
MATRIXX& MATRIXN::set_sub_mat ( unsigned  row_start,
unsigned  col_start,
const M &  m,
Transposition  trans = eNoTranspose 
)
inline

Sets the specified sub matrix.

Parameters
row_startthe row to start (inclusive)
col_startthe column to start (inclusive)
mthe source matrix
transposedetermines whether the m is to be transposed
Note
fails assertion if m is too large to insert into this

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