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 std::shared_ptr<LinearizedGaussianFactor> shared_ptr;
39 
40 protected:
41 
44 
45 public:
46 
48  LinearizedGaussianFactor() = default;
49 
54  LinearizedGaussianFactor(const GaussianFactor::shared_ptr& gaussian, const Values& lin_points);
55 
56  ~LinearizedGaussianFactor() override = default;
57 
58  // access functions
59  const Values& linearizationPoint() const { return lin_points_; }
60 
61 private:
62 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
63 
64  friend class boost::serialization::access;
65  template<class ARCHIVE>
66  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
67  ar & boost::serialization::make_nvp("LinearizedGaussianFactor",
68  boost::serialization::base_object<Base>(*this));
69  ar & BOOST_SERIALIZATION_NVP(lin_points_);
70  }
71 #endif
72 
73 };
74 
79 class GTSAM_UNSTABLE_EXPORT LinearizedJacobianFactor : public LinearizedGaussianFactor {
80 
81 public:
85 
87  typedef std::shared_ptr<LinearizedJacobianFactor> shared_ptr;
88 
93 
94 protected:
95 
96 // // store components of a jacobian factor
97 // typedef std::map<Key, Matrix> KeyMatrixMap;
98 // KeyMatrixMap matrices_;
99 // Vector b_;
100 
101  VerticalBlockMatrix Ab_; // the block view of the full matrix
102 
103 public:
104 
107 
112  LinearizedJacobianFactor(const JacobianFactor::shared_ptr& jacobian, const Values& lin_points);
113 
115 
118  return std::static_pointer_cast<gtsam::NonlinearFactor>(
120 
121  // Testable
122 
124  void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
125 
127  bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
128 
129  // access functions
130  const constBVector b() const { return Ab_(size()).col(0); }
131  const constABlock A() const { return Ab_.range(0, size()); }
132  const constABlock A(Key key) const { return Ab_(std::find(begin(), end(), key) - begin()); }
133 
135  size_t dim() const override { return Ab_.rows(); }
136 
138  double error(const Values& c) const override;
139 
145  std::shared_ptr<GaussianFactor> linearize(const Values& c) const override;
146 
148  Vector error_vector(const Values& c) const;
149 
150 private:
151 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
152  friend class boost::serialization::access;
154  template<class ARCHIVE>
155  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
156  ar & boost::serialization::make_nvp("LinearizedJacobianFactor",
157  boost::serialization::base_object<Base>(*this));
158  ar & BOOST_SERIALIZATION_NVP(Ab_);
159  }
160 #endif
161 };
162 
164 template<>
165 struct traits<LinearizedJacobianFactor> : public Testable<LinearizedJacobianFactor> {
166 };
167 
172 class GTSAM_UNSTABLE_EXPORT LinearizedHessianFactor : public LinearizedGaussianFactor {
173 
174 public:
178 
180  typedef std::shared_ptr<LinearizedHessianFactor> shared_ptr;
181 
185 
188 
189 protected:
190 
192 
194 public:
195 
198 
204  LinearizedHessianFactor(const HessianFactor::shared_ptr& hessian, const Values& lin_points);
205 
207 
210  return std::static_pointer_cast<gtsam::NonlinearFactor>(
212 
213  // Testable
214 
216  void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
217 
219  bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
220 
224  double constantTerm() const {
225  const auto block = info_.diagonalBlock(size());
226  return block(0, 0);
227  }
228 
233  constColumn linearTerm(const_iterator j) const {
234  return info_.aboveDiagonalRange(j - begin(), size(), size(), size() + 1).col(0);
235  }
236 
239  constColumn linearTerm() const {
240  return info_.aboveDiagonalRange(0, size(), size(), size() + 1).col(0);
241  }
242 
254  const DenseIndex J1 = j1 - begin();
255  const DenseIndex J2 = j2 - begin();
256  return info_.block(J1, J2);
257  }
258 
264  return info_.selfadjointView(0, size());
265  }
266 
268  size_t dim() const override { return info_.rows() - 1; }
269 
271  double error(const Values& c) const override;
272 
278  std::shared_ptr<GaussianFactor> linearize(const Values& c) const override;
279 
280 private:
282 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
283  friend class boost::serialization::access;
284  template<class ARCHIVE>
285  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
286  ar & boost::serialization::make_nvp("LinearizedHessianFactor",
287  boost::serialization::base_object<Base>(*this));
288  ar & BOOST_SERIALIZATION_NVP(info_);
289  }
290 #endif
291 };
292 
294 template<>
295 struct traits<LinearizedHessianFactor> : public Testable<LinearizedHessianFactor> {
296 };
297 
298 } // \namespace aspn
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:155
LinearizedHessianFactor This
const gtsam::Symbol key('X', 0)
LinearizedJacobianFactor This
m m block(1, 0, 2, 2)<< 4
const Block< const Derived, internal::traits< Derived >::RowsAtCompileTime, 1, !IsRowMajor > ConstColXpr
Definition: BlockMethods.h:15
std::shared_ptr< This > shared_ptr
A shared_ptr to this class.
std::string serialize(const T &input)
serializes to a string
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.
Matrix expected
Definition: testMatrix.cpp:971
VerticalBlockMatrix::Block ABlock
VerticalBlockMatrix::constBlock::ConstColXpr constBVector
DenseIndex rows() const
Row size.
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
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:108
constColumn linearTerm(const_iterator j) const
const constABlock A(Key key) const
LinearizedGaussianFactor Base
std::shared_ptr< LinearizedJacobianFactor > shared_ptr
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
SymmetricBlockMatrix::Block::ColXpr Column
A column containing the linear term h.
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
gtsam::NonlinearFactor::shared_ptr clone() const override
DenseIndex rows() const
Row size.
Eigen::VectorXd Vector
Definition: Vector.h:38
std::shared_ptr< LinearizedGaussianFactor > shared_ptr
size_t dim() const override
VerticalBlockMatrix::Block::ColXpr BVector
const constBVector b() const
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.
Matrix squaredTerm(const_iterator j1, const_iterator j2) const
const Values & linearizationPoint() const
std::shared_ptr< This > shared_ptr
shared_ptr to this class
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
#define This
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Block range(DenseIndex startBlock, DenseIndex endBlock)
traits
Definition: chartTesting.h:28
VerticalBlockMatrix::constBlock constABlock
const constABlock A() const
Non-linear factor base classes.
Expression of a fixed-size or dynamic-size block.
Definition: Block.h:103
static EIGEN_DEPRECATED const end_t end
std::shared_ptr< This > shared_ptr
Eigen::SelfAdjointView< constBlock, Eigen::Upper > squaredTerm() const
SymmetricBlockMatrix::Block Block
A block from the Hessian matrix.
static double error
Definition: testRot3.cpp:37
SymmetricBlockMatrix::constBlock::ColXpr constColumn
A column containing the linear term h (const version)
const G double tol
Definition: Group.h:86
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:82
SymmetricBlockMatrix::constBlock constBlock
A block from the Hessian matrix (const version)
std::shared_ptr< LinearizedHessianFactor > shared_ptr
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102
Matrix block(DenseIndex I, DenseIndex J) const
LinearizedGaussianFactor This
std::ptrdiff_t j
LinearizedGaussianFactor Base
gtsam::NonlinearFactor::shared_ptr clone() const override


gtsam
Author(s):
autogenerated on Tue Jul 4 2023 02:34:33