gtsam  4.1.0
gtsam
GaussianFactor.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
19 // \callgraph
20 
21 #pragma once
22 
23 #include <gtsam/inference/Factor.h>
24 #include <gtsam/base/Matrix.h>
25 #include <gtsam/base/Testable.h>
26 
27 namespace gtsam {
28 
29  // Forward declarations
30  class VectorValues;
31  class Scatter;
32  class SymmetricBlockMatrix;
33 
38  class GTSAM_EXPORT GaussianFactor : public Factor
39  {
40  public:
41  typedef GaussianFactor This;
42  typedef boost::shared_ptr<This> shared_ptr;
43  typedef Factor Base;
44 
47 
50  template<typename CONTAINER>
51  GaussianFactor(const CONTAINER& keys) : Base(keys) {}
52 
54  virtual ~GaussianFactor() {}
55 
56  // Implementing Testable interface
57  virtual void print(const std::string& s = "",
58  const KeyFormatter& formatter = DefaultKeyFormatter) const = 0;
59 
61  virtual bool equals(const GaussianFactor& lf, double tol = 1e-9) const = 0;
62 
64  virtual double error(const VectorValues& c) const = 0;
67  virtual DenseIndex getDim(const_iterator variable) const = 0;
68 
76  virtual Matrix augmentedJacobian() const = 0;
77 
85  virtual std::pair<Matrix,Vector> jacobian() const = 0;
86 
95  virtual Matrix augmentedInformation() const = 0;
96 
100  virtual Matrix information() const = 0;
101 
103  VectorValues hessianDiagonal() const;
104 
106  virtual void hessianDiagonalAdd(VectorValues& d) const = 0;
107 
109  virtual void hessianDiagonal(double* d) const = 0;
110 
112  virtual std::map<Key,Matrix> hessianBlockDiagonal() const = 0;
113 
115  virtual GaussianFactor::shared_ptr clone() const = 0;
116 
118  virtual bool empty() const = 0;
119 
125  virtual GaussianFactor::shared_ptr negate() const = 0;
126 
132  virtual void updateHessian(const KeyVector& keys,
133  SymmetricBlockMatrix* info) const = 0;
134 
136  virtual void multiplyHessianAdd(double alpha, const VectorValues& x, VectorValues& y) const = 0;
137 
139  virtual VectorValues gradientAtZero() const = 0;
140 
142  virtual void gradientAtZero(double* d) const = 0;
143 
145  virtual Vector gradient(Key key, const VectorValues& x) const = 0;
146 
147  // Determine position of a given key
148  template <typename CONTAINER>
149  static DenseIndex Slot(const CONTAINER& keys, Key key) {
150  return std::find(keys.begin(), keys.end(), key) - keys.begin();
151  }
152 
153  private:
155  friend class boost::serialization::access;
156  template<class ARCHIVE>
157  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
158  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
159  }
160 
161  }; // GaussianFactor
162 
164 template<>
165 struct traits<GaussianFactor> : public Testable<GaussianFactor> {
166 };
167 
168 } // \ namespace gtsam
gtsam::GaussianFactor::shared_ptr
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianFactor.h:42
Testable.h
Concept check for values that can be used in unit tests.
gtsam::GaussianFactor::This
GaussianFactor This
This class.
Definition: GaussianFactor.h:41
gtsam::GaussianFactor::Base
Factor Base
Our base class.
Definition: GaussianFactor.h:43
gtsam::GaussianFactor::GaussianFactor
GaussianFactor(const CONTAINER &keys)
Construct from container of keys.
Definition: GaussianFactor.h:51
gtsam::GaussianFactor::augmentedJacobian
virtual Matrix augmentedJacobian() const =0
Return a dense Jacobian matrix, augmented with b with the noise models baked into A and b.
gtsam::GaussianFactor::empty
virtual bool empty() const =0
Test whether the factor is empty.
gtsam::traits
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:61
gtsam::GaussianFactor
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition: GaussianFactor.h:39
gtsam::GaussianFactor::augmentedInformation
virtual Matrix augmentedInformation() const =0
Return the augmented information matrix represented by this GaussianFactor.
gtsam::GaussianFactor::hessianBlockDiagonal
virtual std::map< Key, Matrix > hessianBlockDiagonal() const =0
Return the block diagonal of the Hessian for this factor.
gtsam::VectorValues
This class represents a collection of vector-valued variables associated each with a unique integer i...
Definition: VectorValues.h:74
gtsam::serialize
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:100
gtsam::GaussianFactor::error
virtual double error(const VectorValues &c) const =0
Print for testable.
gtsam::GaussianFactor::information
virtual Matrix information() const =0
Return the non-augmented information matrix represented by this GaussianFactor.
gtsam::GaussianFactor::multiplyHessianAdd
virtual void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const =0
y += alpha * A'*A*x
gtsam
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
gtsam::GaussianFactor::getDim
virtual DenseIndex getDim(const_iterator variable) const =0
0.5*(A*x-b)'D(A*x-b)
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:155
gtsam::Testable
A helper that implements the traits interface for GTSAM types.
Definition: Testable.h:150
Factor.h
The base class for all factors.
gtsam::GaussianFactor::gradientAtZero
virtual void gradientAtZero(double *d) const =0
Raw memory access version of gradientAtZero.
gtsam::GaussianFactor::clone
virtual GaussianFactor::shared_ptr clone() const =0
Clone a factor (make a deep copy)
gtsam::DenseIndex
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition: types.h:67
gtsam::GaussianFactor::gradientAtZero
virtual VectorValues gradientAtZero() const =0
A'*b for Jacobian, eta for Hessian.
gtsam::KeyFormatter
boost::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
gtsam::Factor
This is the base class for all factor types.
Definition: Factor.h:55
Matrix.h
typedef and functions to augment Eigen's MatrixXd
gtsam::Factor::const_iterator
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:67
gtsam::GaussianFactor::GaussianFactor
GaussianFactor()
Default constructor creates empty factor.
Definition: GaussianFactor.h:46
gtsam::GaussianFactor::hessianDiagonalAdd
virtual void hessianDiagonalAdd(VectorValues &d) const =0
Add the current diagonal to a VectorValues instance.
gtsam::KeyVector
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
gtsam::GaussianFactor::jacobian
virtual std::pair< Matrix, Vector > jacobian() const =0
Return the dense Jacobian and right-hand-side , with the noise models baked into A and b.
gtsam::GaussianFactor::updateHessian
virtual void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info) const =0
Update an information matrix by adding the information corresponding to this factor (used internally ...
gtsam::SymmetricBlockMatrix
Definition: SymmetricBlockMatrix.h:52
gtsam::GaussianFactor::negate
virtual GaussianFactor::shared_ptr negate() const =0
Construct the corresponding anti-factor to negate information stored stored in this factor.
gtsam::GaussianFactor::gradient
virtual Vector gradient(Key key, const VectorValues &x) const =0
Gradient wrt a key at any values.
gtsam::GaussianFactor::equals
virtual bool equals(const GaussianFactor &lf, double tol=1e-9) const =0
Equals for testable.
gtsam::GaussianFactor::~GaussianFactor
virtual ~GaussianFactor()
Destructor.
Definition: GaussianFactor.h:54