LinearizedFactor.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 
18 #pragma once
19 
20 #include <vector>
21 #include <gtsam_unstable/dllexport.h>
25 
26 namespace gtsam {
27 
31 class GTSAM_UNSTABLE_EXPORT LinearizedGaussianFactor : public NonlinearFactor {
32 public:
36 
38  typedef boost::shared_ptr<LinearizedGaussianFactor> shared_ptr;
39 
40 protected:
41 
44 
45 public:
46 
49 
54  LinearizedGaussianFactor(const GaussianFactor::shared_ptr& gaussian, const Values& lin_points);
55 
57 
58  // access functions
59  const Values& linearizationPoint() const { return lin_points_; }
60 
61 private:
63  friend class boost::serialization::access;
64  template<class ARCHIVE>
65  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
66  ar & boost::serialization::make_nvp("LinearizedGaussianFactor",
67  boost::serialization::base_object<Base>(*this));
68  ar & BOOST_SERIALIZATION_NVP(lin_points_);
69  }
70 
71 };
72 
77 class GTSAM_UNSTABLE_EXPORT LinearizedJacobianFactor : public LinearizedGaussianFactor {
78 
79 public:
83 
85  typedef boost::shared_ptr<LinearizedJacobianFactor> shared_ptr;
86 
91 
92 protected:
93 
94 // // store components of a jacobian factor
95 // typedef std::map<Key, Matrix> KeyMatrixMap;
96 // KeyMatrixMap matrices_;
97 // Vector b_;
98 
99  VerticalBlockMatrix Ab_; // the block view of the full matrix
100 
101 public:
102 
105 
110  LinearizedJacobianFactor(const JacobianFactor::shared_ptr& jacobian, const Values& lin_points);
111 
113 
116  return boost::static_pointer_cast<gtsam::NonlinearFactor>(
118 
119  // Testable
120 
122  void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
123 
125  bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
126 
127  // access functions
128  const constBVector b() const { return Ab_(size()).col(0); }
129  const constABlock A() const { return Ab_.range(0, size()); };
130  const constABlock A(Key key) const { return Ab_(std::find(begin(), end(), key) - begin()); }
131 
133  size_t dim() const override { return Ab_.rows(); };
134 
136  double error(const Values& c) const override;
137 
143  boost::shared_ptr<GaussianFactor> linearize(const Values& c) const override;
144 
146  Vector error_vector(const Values& c) const;
147 
148 private:
150  friend class boost::serialization::access;
151  template<class ARCHIVE>
152  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
153  ar & boost::serialization::make_nvp("LinearizedJacobianFactor",
154  boost::serialization::base_object<Base>(*this));
155  ar & BOOST_SERIALIZATION_NVP(Ab_);
156  }
157 };
158 
160 template<>
161 struct traits<LinearizedJacobianFactor> : public Testable<LinearizedJacobianFactor> {
162 };
163 
168 class GTSAM_UNSTABLE_EXPORT LinearizedHessianFactor : public LinearizedGaussianFactor {
169 
170 public:
174 
176  typedef boost::shared_ptr<LinearizedHessianFactor> shared_ptr;
177 
181 
184 
185 protected:
186 
188 
190 public:
191 
194 
200  LinearizedHessianFactor(const HessianFactor::shared_ptr& hessian, const Values& lin_points);
201 
203 
206  return boost::static_pointer_cast<gtsam::NonlinearFactor>(
208 
209  // Testable
210 
212  void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
213 
215  bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
216 
220  double constantTerm() const {
221  const auto block = info_.diagonalBlock(size());
222  return block(0, 0);
223  }
224 
229  constColumn linearTerm(const_iterator j) const {
230  return info_.aboveDiagonalRange(j - begin(), size(), size(), size() + 1).col(0);
231  }
232 
235  constColumn linearTerm() const {
236  return info_.aboveDiagonalRange(0, size(), size(), size() + 1).col(0);
237  }
238 
250  const DenseIndex J1 = j1 - begin();
251  const DenseIndex J2 = j2 - begin();
252  return info_.block(J1, J2);
253  }
254 
260  return info_.selfadjointView(0, size());
261  }
262 
264  size_t dim() const override { return info_.rows() - 1; }
265 
267  double error(const Values& c) const override;
268 
274  boost::shared_ptr<GaussianFactor> linearize(const Values& c) const override;
275 
276 private:
278  friend class boost::serialization::access;
279  template<class ARCHIVE>
280  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
281  ar & boost::serialization::make_nvp("LinearizedHessianFactor",
282  boost::serialization::base_object<Base>(*this));
283  ar & BOOST_SERIALIZATION_NVP(info_);
284  }
285 };
286 
288 template<>
289 struct traits<LinearizedHessianFactor> : public Testable<LinearizedHessianFactor> {
290 };
291 
292 } // \namespace aspn
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:155
LinearizedHessianFactor This
LinearizedJacobianFactor This
m m block(1, 0, 2, 2)<< 4
Matrix squaredTerm(const_iterator j1, const_iterator j2) const
const Block< const Derived, internal::traits< Derived >::RowsAtCompileTime, 1,!IsRowMajor > ConstColXpr
Definition: BlockMethods.h:15
boost::shared_ptr< LinearizedHessianFactor > shared_ptr
Matrix expected
Definition: testMatrix.cpp:974
VerticalBlockMatrix::Block ABlock
VerticalBlockMatrix::constBlock::ConstColXpr constBVector
boost::shared_ptr< LinearizedJacobianFactor > shared_ptr
boost::shared_ptr< LinearizedGaussianFactor > shared_ptr
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:43
Scalar Scalar * c
Definition: benchVecAdd.cpp:17
Block< Derived, internal::traits< Derived >::RowsAtCompileTime, 1,!IsRowMajor > ColXpr
Definition: BlockMethods.h:14
size_t dim() const override
static const KeyFormatter DefaultKeyFormatter
Definition: Key.h:43
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition: types.h:67
LinearizedGaussianFactor Base
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
const constABlock A(Key key) const
void serialize(ARCHIVE &ar, const unsigned int)
SymmetricBlockMatrix::Block::ColXpr Column
A column containing the linear term h.
gtsam::NonlinearFactor::shared_ptr clone() const override
Eigen::VectorXd Vector
Definition: Vector.h:38
size_t dim() const override
VerticalBlockMatrix::Block::ColXpr BVector
boost::shared_ptr< This > shared_ptr
constColumn linearTerm() const
boost::shared_ptr< This > shared_ptr
A shared_ptr to this class.
Eigen::SelfAdjointView< constBlock, Eigen::Upper > squaredTerm() const
std::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
Contains the HessianFactor class, a general quadratic factor.
Array< double, 1, 3 > e(1./3., 0.5, 2.)
RealScalar s
Expression of a selfadjoint matrix from a triangular part of a dense matrix.
const constBVector b() const
void serialize(ARCHIVE &ar, const unsigned int)
#define This
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Block range(DenseIndex startBlock, DenseIndex endBlock)
traits
Definition: chartTesting.h:28
Matrix block(DenseIndex I, DenseIndex J) const
VerticalBlockMatrix::constBlock constABlock
constColumn linearTerm(const_iterator j) const
const constABlock A() const
Non-linear factor base classes.
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.
Expression of a fixed-size or dynamic-size block.
Definition: Block.h:103
const Values & linearizationPoint() const
void serialize(ARCHIVE &ar, const unsigned int)
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
SymmetricBlockMatrix::Block Block
A block from the Hessian matrix.
static double error
Definition: testRot3.cpp:39
SymmetricBlockMatrix::constBlock::ColXpr constColumn
A column containing the linear term h (const version)
const G double tol
Definition: Group.h:83
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J&#39;th diagonal block as a self adjoint view.
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:67
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
SymmetricBlockMatrix::constBlock constBlock
A block from the Hessian matrix (const version)
DenseIndex rows() const
Row size.
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:61
LinearizedGaussianFactor This
std::ptrdiff_t j
LinearizedGaussianFactor Base
gtsam::NonlinearFactor::shared_ptr clone() const override
DenseIndex rows() const
Row size.


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:42:31