Loading...
Searching...
No Matches
gtsam::SymmetricBlockMatrix Class Reference
Base

## Detailed Description

This class stores a dense matrix and allows it to be accessed as a collection of blocks.

When constructed, the caller must provide the dimensions of the blocks.

The block structure is symmetric, but the underlying matrix does not necessarily need to be.

This class also has a parameter that can be changed after construction to change the apparent matrix view. firstBlock() determines the block that appears to have index 0 for all operations (except re-setting firstBlock()).

## Public Member Functions

| SymmetricBlockMatrix ()
| Construct from an empty matrix (asserts that the matrix is empty).
template<typename CONTAINER>
| SymmetricBlockMatrix (const CONTAINER &dimensions, bool appendOneDimension=false)
| Construct from a container of the sizes of each block.
template<typename ITERATOR>
| SymmetricBlockMatrix (ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension=false)
| Construct from iterator over the sizes of each vertical block.
template<typename CONTAINER>
| SymmetricBlockMatrix (const CONTAINER &dimensions, const Matrix &matrix, bool appendOneDimension=false)
| Construct from a container of the sizes of each vertical block and a pre-prepared matrix.
DenseIndex | rows () const
| Row size.
DenseIndex | cols () const
| Column size.
DenseIndex | nBlocks () const
| Block count.
DenseIndex | getDim (DenseIndex block) const
| Number of dimensions for variable on this diagonal block.
DenseIndex & | blockStart ()
| Retrieve or modify the first logical block, i.e.
DenseIndex | blockStart () const
| Retrieve the first logical block, i.e.
void | choleskyPartial (DenseIndex nFrontals)
| Given the augmented Hessian [A1'A1 A1'A2 A1'b A2'A1 A2'A2 A2'b b'A1 b'A2 b'b] on x1 and x2, does partial Cholesky in-place to obtain [R Sd;0 L] such that R'R = A1'A1 R'Sd = [A1'A2 A1'b] L'L is the augmented Hessian on the the separator x2 R and Sd can be interpreted as a GaussianConditional |R*x1 + S*x2 - d]^2.
VerticalBlockMatrix | split (DenseIndex nFrontals)
| After partial Cholesky, we can optionally split off R and Sd, to be interpreted as a GaussianConditional |R*x1 + S*x2 - d]^2.
Block getter methods.
Matrix | block (DenseIndex I, DenseIndex J) const
| Get a copy of a block (anywhere in the matrix).
Eigen::SelfAdjointView< Block, Eigen::Upper > | diagonalBlock (DenseIndex J)
| Return the J'th diagonal block as a self adjoint view.
Eigen::SelfAdjointView< constBlock, Eigen::Upper > | diagonalBlock (DenseIndex J) const
| Return the J'th diagonal block as a self adjoint view.
Vector | diagonal (DenseIndex J) const
| Get the diagonal of the J'th diagonal block.
constBlock | aboveDiagonalBlock (DenseIndex I, DenseIndex J) const
| Get block above the diagonal (I, J).
Eigen::SelfAdjointView< constBlock, Eigen::Upper > | selfadjointView (DenseIndex I, DenseIndex J) const
| Return the square sub-matrix that contains blocks(i:j, i:j).
Eigen::TriangularView< constBlock, Eigen::Upper > | triangularView (DenseIndex I, DenseIndex J) const
| Return the square sub-matrix that contains blocks(i:j, i:j) as a triangular view.
constBlock | aboveDiagonalRange (DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock) const
| Get a range [i,j) from the matrix. Indices are in block units.
Block | aboveDiagonalRange (DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock)
| Get a range [i,j) from the matrix. Indices are in block units.
Block setter methods.
template<typename XprType>
void | setDiagonalBlock (DenseIndex I, const XprType &xpr)
| Set a diagonal block. Only the upper triangular portion of xpr is evaluated.
template<typename XprType>
void | setOffDiagonalBlock (DenseIndex I, DenseIndex J, const XprType &xpr)
| Set an off-diagonal block. Only the upper triangular portion of xpr is evaluated.
template<typename XprType>
void | updateDiagonalBlock (DenseIndex I, const XprType &xpr)
| Increment the diagonal block by the values in xpr. Only reads the upper triangular part of xpr.
template<typename XprType>
void | updateOffDiagonalBlock (DenseIndex I, DenseIndex J, const XprType &xpr)
| Update an off diagonal block.
Accessing the full matrix.
Eigen::SelfAdjointView< Block, Eigen::Upper > | selfadjointView ()
| Get self adjoint view.
Eigen::SelfAdjointView< constBlock, Eigen::Upper > | selfadjointView () const
| Get self adjoint view.
template<typename XprType>
void | setFullMatrix (const XprType &xpr)
| Set the entire active matrix. Only reads the upper triangular part of xpr.
void | setZero ()
| Set the entire active matrix zero.
void | negate ()
| Negate the entire active matrix.
void | invertInPlace ()
| Invert the entire active matrix in place.

## Static Public Member Functions

static SymmetricBlockMatrix | LikeActiveViewOf (const SymmetricBlockMatrix &other)
| Copy the block structure, but do not copy the matrix data.
static SymmetricBlockMatrix | LikeActiveViewOf (const VerticalBlockMatrix &other)
| Copy the block structure, but do not copy the matrix data.

## Public Types

typedef SymmetricBlockMatrix | This
typedef Eigen::Block< Matrix > | Block
typedef Eigen::Block< const Matrix > | constBlock

## Protected Member Functions

DenseIndex | nOffsets () const
| Number of offsets in the full matrix.
DenseIndex | nActualBlocks () const
| Number of actual blocks in the full matrix.
DenseIndex | offset (DenseIndex block) const
| Get an offset for a block index (in the active view).
constBlock | block_ (DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1, DenseIndex blockCols=1) const
| Get an arbitrary block from the matrix. Indices are in block units.
Block | block_ (DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1, DenseIndex blockCols=1)
| Get an arbitrary block from the matrix. Indices are in block units.
constBlock | full () const
| Get the full matrix as a block.
Block | full ()
| Get the full matrix as a block.
std::array< DenseIndex, 4 > | calcIndices (DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows, DenseIndex blockCols) const
| Compute the indices into the underlying matrix for a given block.
void | assertInvariants () const
template<typename ITERATOR>
void | fillOffsets (ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension)

## Protected Attributes

Matrix | matrix_
| The full matrix.
FastVector< DenseIndex > | variableColOffsets_
| the starting columns of each block (0-based)
DenseIndex | blockStart_
| Changes apparent matrix view, see main class comment.

## Friends

class | VerticalBlockMatrix
template<typename SymmetricBlockMatrixType>
class | SymmetricBlockMatrixBlockExpr
class | boost::serialization::access
| Serialization function.

## Member Function Documentation

## block()

Matrix gtsam::SymmetricBlockMatrix::block | ( | DenseIndex | I,
|  | DenseIndex | J ) const

Get a copy of a block (anywhere in the matrix).

This method makes a copy - use the methods below if performance is critical.

## blockStart() [1/2]

DenseIndex & gtsam::SymmetricBlockMatrix::blockStart | ( |  | ) |

inline

Retrieve or modify the first logical block, i.e.

the block referenced by block index 0. Blocks before it will be inaccessible, except by accessing the underlying matrix using matrix().

## blockStart() [2/2]

DenseIndex gtsam::SymmetricBlockMatrix::blockStart | ( |  | ) | const

inline

Retrieve the first logical block, i.e.

the block referenced by block index 0. Blocks before it will be inaccessible, except by accessing the underlying matrix using matrix().

## LikeActiveViewOf() [1/2]

SymmetricBlockMatrix gtsam::SymmetricBlockMatrix::LikeActiveViewOf | ( | const SymmetricBlockMatrix & | other | ) |

static

Copy the block structure, but do not copy the matrix data.

If blockStart() has been modified, this copies the structure of the corresponding matrix view. In the destination SymmetricBlockMatrix, blockStart() will be 0.

## LikeActiveViewOf() [2/2]

SymmetricBlockMatrix gtsam::SymmetricBlockMatrix::LikeActiveViewOf | ( | const VerticalBlockMatrix & | other | ) |

static

Copy the block structure, but do not copy the matrix data.

If blockStart() has been modified, this copies the structure of the corresponding matrix view. In the destination SymmetricBlockMatrix, blockStart() will be 0.

## split()

VerticalBlockMatrix gtsam::SymmetricBlockMatrix::split | ( | DenseIndex | nFrontals | ) |

After partial Cholesky, we can optionally split off R and Sd, to be interpreted as a GaussianConditional |R*x1 + S*x2 - d]^2.

We leave the symmetric lower block L in place, and adjust block_start so now *this refers to it.

## updateOffDiagonalBlock()

template<typename XprType>

void gtsam::SymmetricBlockMatrix::updateOffDiagonalBlock | ( | DenseIndex | I,
|  | DenseIndex | J,
|  | const XprType & | xpr )

inline

Update an off diagonal block.

NOTE(emmett): This assumes noalias().

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

- /build/gtsam-Xg031d/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.h
- /build/gtsam-Xg031d/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.cpp