template<size_t D>
class gtsam::RegularHessianFactor< D >
A HessianFactor where all variables have the same dimension D.
Represents a quadratic factor \( E(x) = 0.5 x^T G x - g^T x + 0.5 f \), corresponding to a Gaussian probability density \( P(x) \propto \exp(-E(x)) \). Here, G is the Hessian (or information matrix), g is the gradient vector, and f is a constant term (negative log-likelihood at x=0).
This class is templated on the dimension D and enforces that all variables associated with this factor have this dimension during construction. It inherits from HessianFactor but provides specialized, efficient implementations for operations like multiplyHessianAdd using raw memory access, assuming a regular block structure. This can significantly improve performance in iterative optimization algorithms when dealing with many variables of the same type and dimension (e.g., Pose3 variables in SLAM).
It can be constructed directly from Hessian blocks, from a RegularJacobianFactor, or by linearizing a NonlinearFactorGraph.
- Template Parameters
-
| D | The dimension of each variable block involved in the factor. |
|
| | RegularHessianFactor (const KeyVector &js, const std::vector< Matrix > &Gs, const std::vector< Vector > &gs, double f) |
| | Construct an n-way factor from supplied components.
|
| | RegularHessianFactor (Key j1, Key j2, const MatrixD &G11, const MatrixD &G12, const VectorD &g1, const MatrixD &G22, const VectorD &g2, double f) |
| | Construct a binary factor.
|
| | RegularHessianFactor (Key j1, Key j2, Key j3, const MatrixD &G11, const MatrixD &G12, const MatrixD &G13, const VectorD &g1, const MatrixD &G22, const MatrixD &G23, const VectorD &g2, const MatrixD &G33, const VectorD &g3, double f) |
| | Construct a ternary factor.
|
| template<typename KEYS> |
| | RegularHessianFactor (const KEYS &keys, const SymmetricBlockMatrix &augmentedInformation) |
| | Constructor with an arbitrary number of keys and the augmented information matrix specified as a block matrix.
|
| | RegularHessianFactor (const RegularJacobianFactor< D > &jf) |
| | Construct a RegularHessianFactor from a RegularJacobianFactor.
|
| | RegularHessianFactor (const GaussianFactorGraph &factors, const Scatter &scatter) |
| | Construct from a GaussianFactorGraph combined using a Scatter.
|
| | RegularHessianFactor (const GaussianFactorGraph &factors) |
| | Construct from a GaussianFactorGraph.
|
| void | multiplyHessianAdd (double alpha, const VectorValues &x, VectorValues &y) const override |
| | Multiply the Hessian part of the factor times a VectorValues x and add the result to y.
|
| void | multiplyHessianAdd (double alpha, const double *x, double *yvalues) const |
| | Multiply the Hessian part of the factor times a raw vector x and add the result to y.
|
| void | multiplyHessianAdd (double alpha, const double *x, double *yvalues, const std::vector< size_t > &offsets) const |
| | Multiply the Hessian part of the factor times a raw vector x and add the result to y.
|
| void | hessianDiagonal (double *d) const override |
| | Return the diagonal of the Hessian for this factor (Raw memory version).
|
| void | gradientAtZero (double *d) const override |
| | Add the gradient vector \( -g \) (gradient at zero) to a raw memory block d.
|
|
| HessianFactor () |
| | default constructor for I/O
|
| | HessianFactor (Key j, const Matrix &G, const Vector &g, double f) |
| | Construct a unary factor.
|
| | HessianFactor (Key j, const Vector &mu, const Matrix &Sigma) |
| | Construct a unary factor, given a mean and covariance matrix.
|
| | HessianFactor (Key j1, Key j2, const Matrix &G11, const Matrix &G12, const Vector &g1, const Matrix &G22, const Vector &g2, double f) |
| | Construct a binary factor.
|
| | HessianFactor (Key j1, Key j2, Key j3, const Matrix &G11, const Matrix &G12, const Matrix &G13, const Vector &g1, const Matrix &G22, const Matrix &G23, const Vector &g2, const Matrix &G33, const Vector &g3, double f) |
| | Construct a ternary factor.
|
| | HessianFactor (const KeyVector &js, const std::vector< Matrix > &Gs, const std::vector< Vector > &gs, double f) |
| | Construct an n-way factor.
|
|
template<typename KEYS> |
| | HessianFactor (const KEYS &keys, const SymmetricBlockMatrix &augmentedInformation) |
| | Construct from keys and a copied augmented information block matrix.
|
| template<typename KEYS> |
| | HessianFactor (const KEYS &keys, SymmetricBlockMatrix &&augmentedInformation) |
| | Construct from keys and take ownership of an augmented information block matrix.
|
|
| HessianFactor (const JacobianFactor &cg) |
| | Construct from a JacobianFactor (or from a GaussianConditional since it derives from it).
|
|
| HessianFactor (const GaussianFactor &factor) |
| | Attempt to construct from any GaussianFactor - currently supports JacobianFactor, HessianFactor, GaussianConditional, or any derived classes.
|
|
| HessianFactor (const GaussianFactorGraph &factors, const Scatter &scatter) |
| | Combine a set of factors into a single dense HessianFactor.
|
|
| HessianFactor (const GaussianFactorGraph &factors) |
| | Combine a set of factors into a single dense HessianFactor.
|
|
| ~HessianFactor () override |
| | Destructor.
|
| GaussianFactor::shared_ptr | clone () const override |
| | Clone this HessianFactor.
|
| void | print (const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override |
| | Print the factor for debugging and testing (implementing Testable).
|
| bool | equals (const GaussianFactor &lf, double tol=1e-9) const override |
| | Compare to another factor for testing (implementing Testable).
|
| double | error (const VectorValues &c) const override |
| | Evaluate the factor error f(x).
|
| double | deltaError (const VectorValues &c, double *oldError=nullptr, double *newError=nullptr) const override |
| | Compute the change in error from zero to c, optionally returning the old and new errors.
|
| DenseIndex | getDim (const_iterator variable) const override |
| | Return the dimension of the variable pointed to by the given key iterator todo: Remove this in favor of keeping track of dimensions with variables?
|
|
size_t | rows () const |
| | Return the number of columns and rows of the Hessian matrix, including the information vector.
|
| GaussianFactor::shared_ptr | negate () const override |
| | Construct the corresponding anti-factor to negate information stored stored in this factor.
|
| double | constantTerm () const |
| | Return the constant term \( f \) as described above.
|
| double & | constantTerm () |
| | Return the constant term \( f \) as described above.
|
| SymmetricBlockMatrix::constBlock | linearTerm (const_iterator j) const |
| | Return the part of linear term \( g \) as described above corresponding to the requested variable.
|
| SymmetricBlockMatrix::constBlock | linearTerm () const |
| | Return the complete linear term \( g \) as described above.
|
| SymmetricBlockMatrix::Block | linearTerm () |
| | Return the complete linear term \( g \) as described above.
|
|
const SymmetricBlockMatrix & | info () const |
| | Return underlying information matrix.
|
| SymmetricBlockMatrix & | info () |
| | Return non-const information matrix.
|
| Matrix | augmentedInformation () const override |
| | Return the augmented information matrix represented by this GaussianFactor.
|
|
Eigen::SelfAdjointView< SymmetricBlockMatrix::constBlock, Eigen::Upper > | informationView () const |
| | Return self-adjoint view onto the information matrix (NOT augmented).
|
| Matrix | information () const override |
| | Return the non-augmented information matrix represented by this GaussianFactor.
|
| void | hessianDiagonalAdd (VectorValues &d) const override |
| | Add the current diagonal to a VectorValues instance.
|
| std::map< Key, Matrix > | hessianBlockDiagonal () const override |
| | Return the block diagonal of the Hessian for this factor.
|
| std::pair< Matrix, Vector > | jacobian () const override |
| | Return (dense) matrix associated with factor.
|
| Matrix | augmentedJacobian () const override |
| | Return (dense) matrix associated with factor The returned system is an augmented matrix: [A b].
|
| void | updateHessian (const KeyVector &keys, SymmetricBlockMatrix *info) const override |
| | Update an information matrix by adding the information corresponding to this factor (used internally during elimination).
|
| void | updateHessian (const KeyVector &keys, SymmetricBlockMatrix *info, DenseIndex beginCol, DenseIndex endCol) const override |
| | Update an information matrix by adding the information corresponding to this factor (used internally during elimination), restricted to a range of block columns, useful for parallelization.
|
| void | updateHessian (HessianFactor *other) const |
| | Update another Hessian factor.
|
| VectorValues | gradientAtZero () const override |
| | eta for Hessian
|
| Vector | gradient (Key key, const VectorValues &x) const override |
| | Compute the gradient at a key: \( \grad f(x_i) = \sum_j G_ij*x_j - g_i \).
|
| std::shared_ptr< GaussianConditional > | eliminateCholesky (const Ordering &keys) |
| | In-place elimination that returns a conditional on (ordered) keys specified, and leaves this factor to be on the remaining keys (separator) only.
|
|
VectorValues | solve () |
| | Solve the system A'*A delta = A'*b in-place, return delta as VectorValues.
|
| double | error (const HybridValues &c) const override |
| | All factor types need to implement an error function.
|
|
VectorValues | hessianDiagonal () const |
| | Using the base method.
|
|
| GaussianFactor () |
| | Default constructor creates empty factor.
|
| template<typename CONTAINER> |
| | GaussianFactor (const CONTAINER &keys) |
| | Construct from container of keys.
|
|
VectorValues | hessianDiagonal () const |
| | Return the diagonal of the Hessian for this factor.
|
| virtual bool | isJacobian () const |
| | Fast check for JacobianFactor-based types.
|
|
virtual | ~Factor ()=default |
| | Default destructor.
|
|
bool | empty () const |
| | Whether the factor is empty (involves zero variables).
|
|
Key | front () const |
| | First key.
|
|
Key | back () const |
| | Last key.
|
|
const_iterator | find (Key key) const |
| | find
|
|
const KeyVector & | keys () const |
| | Access the factor's involved variable keys.
|
|
const_iterator | begin () const |
| | Iterator at beginning of involved variable keys.
|
|
const_iterator | end () const |
| | Iterator at end of involved variable keys.
|
| size_t | size () const |
| virtual void | printKeys (const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const |
| | print only keys
|
|
bool | equals (const This &other, double tol=1e-9) const |
| | check equality
|
| KeyVector & | keys () |
|
iterator | begin () |
| | Iterator at beginning of involved variable keys.
|
|
iterator | end () |
| | Iterator at end of involved variable keys.
|