gtsam  4.0.0 gtsam
gtsam::SymmetricBlockMatrix Class Reference

## 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.

DenseIndexblockStart ()
Retrieve or modify the first logical block, i.e. More...

DenseIndex blockStart () const
Retrieve the first logical block, i.e. More...

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. More...

Block getter methods.
Matrix block (DenseIndex I, DenseIndex J) const
Get a copy of a block (anywhere in the matrix). More...

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).

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. More...

Accessing the full matrix.

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. More...

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

## 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< DenseIndexvariableColOffsets_
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.

## ◆ 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: