26 #include <boost/make_shared.hpp>
34 class GaussianConditional;
35 class GaussianBayesNet;
36 class GaussianFactorGraph;
38 GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<GaussianFactor> >
39 EliminatePreferCholesky(
const GaussianFactorGraph& factors,
const Ordering& keys);
41 GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<HessianFactor> >
42 EliminateCholesky(
const GaussianFactorGraph& factors,
const Ordering& keys);
48 size_t slot, dimension;
49 SlotEntry(
size_t _slot,
size_t _dimension)
50 : slot(_slot), dimension(_dimension) {}
51 std::string toString()
const;
65 boost::optional<const Ordering&> ordering = boost::none);
176 const Matrix& G11,
const Matrix& G12,
const Vector& g1,
177 const Matrix& G22,
const Vector& g2,
double f);
184 const Matrix& G11,
const Matrix& G12,
const Matrix& G13,
const Vector& g1,
185 const Matrix& G22,
const Matrix& G23,
const Vector& g2,
186 const Matrix& G33,
const Vector& g3,
double f);
192 HessianFactor(
const std::vector<Key>& js,
const std::vector<Matrix>& Gs,
193 const std::vector<Vector>& gs,
double f);
197 template<
typename KEYS>
209 boost::optional<const Scatter&> scatter = boost::none);
216 return boost::make_shared<HessianFactor>(*this); }
219 virtual void print(
const std::string& s =
"",
220 const KeyFormatter& formatter = DefaultKeyFormatter)
const;
236 size_t rows()
const {
return info_.rows(); }
246 virtual bool empty()
const {
return size() == 0 ; }
287 double constantTerm()
const {
return info_(this->size(), this->size())(0,0); }
292 double&
constantTerm() {
return info_(this->size(), this->size())(0,0); }
299 return info_(j-begin(), size()).knownOffDiagonal().col(0); }
306 return info_(j-begin(), size()).knownOffDiagonal().col(0); }
311 return info_.range(0, this->size(), this->size(), this->size() + 1).knownOffDiagonal().col(0); }
316 return info_.range(0, this->size(), this->size(), this->size() + 1).knownOffDiagonal().col(0); }
333 virtual Matrix augmentedInformation()
const;
338 virtual Matrix information()
const;
344 virtual void hessianDiagonal(
double* d)
const;
347 virtual std::map<Key,Matrix> hessianBlockDiagonal()
const;
354 virtual std::pair<Matrix, Vector> jacobian()
const;
361 virtual Matrix augmentedJacobian()
const;
383 void multiplyHessianAdd(
double alpha,
const double* x,
double* y, std::vector<size_t> keys)
const;
390 virtual void gradientAtZero(
double* d)
const;
408 friend GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<HessianFactor> >
426 friend GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<GaussianFactor> >
432 friend class boost::serialization::access;
433 template<
class ARCHIVE>
434 void serialize(ARCHIVE & ar,
const unsigned int version) {
436 ar & BOOST_SERIALIZATION_NVP(info_);
Scatter is an intermediate data structure used when building a HessianFactor incrementally, to get the keys in the right order.
Definition: HessianFactor.h:60
Block::OffDiagonal::ColXpr linearTerm()
Return the complete linear term as described above.
Definition: HessianFactor.h:315
Access to matrices via blocks of pre-defined sizes.
double constantTerm() const
Return the constant term as described above.
Definition: HessianFactor.h:287
virtual bool empty() const
Check if the factor is empty.
Definition: HessianFactor.h:246
A Gaussian factor using the canonical parameters (information form)
Definition: HessianFactor.h:131
Block::OffDiagonal::ColXpr linearTerm(iterator j)
Return the part of linear term as described above corresponding to the requested variable...
Definition: HessianFactor.h:305
const SymmetricBlockMatrix & matrixObject() const
Return the full augmented Hessian matrix of this factor as a SymmetricBlockMatrix object...
Definition: HessianFactor.h:364
virtual GaussianFactor::shared_ptr clone() const
Clone this HessianFactor.
Definition: HessianFactor.h:215
SymmetricBlockMatrix::constBlock info() const
Return the upper-triangular part of the full augmented information matrix, as described above...
Definition: HessianFactor.h:276
A Gaussian factor in the squared-error form.
Definition: JacobianFactor.h:82
virtual ~HessianFactor()
Destructor.
Definition: HessianFactor.h:212
GaussianFactor Base
Typedef to base class.
Definition: HessianFactor.h:138
SymmetricBlockMatrix::constBlock constBlock
A block from the Hessian matrix (const version)
Definition: HessianFactor.h:142
constBlock::OffDiagonal::ColXpr linearTerm() const
Return the complete linear term as described above.
Definition: HessianFactor.h:310
void print(const Matrix &A, const string &s, ostream &stream)
print a matrix
Definition: Matrix.cpp:183
A thin wrapper around std::map that uses boost's fast_pool_allocator.
SymmetricBlockMatrix info_
The full augmented information matrix, s.t. the quadratic error is 0.5*[x -1]'H[x -1]...
Definition: HessianFactor.h:134
A factor with a quadratic error function - a Gaussian.
A matrix expression that references a single block of a SymmetricBlockMatrix.
Definition: SymmetricBlockMatrixBlockExpr.h:22
void multiplyHessianAdd(double alpha, const double *x, double *y) const
y += alpha * A'*A*x
Definition: HessianFactor.h:385
Template to create a binary predicate.
Definition: Testable.h:102
HessianFactor This
Typedef to this class.
Definition: HessianFactor.h:139
size_t Key
Integer nonlinear key type.
Definition: types.h:59
SymmetricBlockMatrix::Block info()
Return the upper-triangular part of the full augmented information matrix, as described above...
Definition: HessianFactor.h:282
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition: types.h:74
virtual DenseIndex getDim(const_iterator variable) const
0.5*[x -1]'H[x -1] (also see constructor documentation)
Definition: HessianFactor.h:233
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianFactor.h:39
constBlock::OffDiagonal::ColXpr linearTerm(const_iterator j) const
Return the part of linear term as described above corresponding to the requested variable...
Definition: HessianFactor.h:298
FastVector< Key >::iterator iterator
Iterator over keys.
Definition: Factor.h:61
Block info(iterator j1, iterator j2)
Return a view of the block at (j1,j2) of the upper-triangular part of the information matrix ...
Definition: HessianFactor.h:270
This class represents a collection of vector-valued variables associated each with a unique integer i...
Definition: VectorValues.h:89
Definition: SymmetricBlockMatrix.h:40
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition: GaussianFactorGraph.h:65
Definition: Ordering.h:30
size_t rows() const
Return the number of columns and rows of the Hessian matrix, including the information vector...
Definition: HessianFactor.h:236
Contains the HessianFactor class, a general quadratic factor.
One SlotEntry stores the slot index for a variable, as well its dimension.
Definition: HessianFactor.h:47
constBlock info(const_iterator j1, const_iterator j2) const
Return a view of the block at (j1,j2) of the upper-triangular part of the information matrix ...
Definition: HessianFactor.h:258
SymmetricBlockMatrix::Block Block
A block from the Hessian matrix.
Definition: HessianFactor.h:141
double & constantTerm()
Return the constant term as described above.
Definition: HessianFactor.h:292
A thin wrapper around std::vector that uses boost's pool_allocator.
boost::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: types.h:62
FastVector< Key >::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:64
boost::shared_ptr< This > shared_ptr
A shared_ptr to this class.
Definition: HessianFactor.h:140
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition: GaussianFactor.h:35