GTSAM  4.0.2
C++ library for smoothing and mapping (SAM)
SubgraphPreconditioner.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010-2019, 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 
21 #include <gtsam/linear/Errors.h>
25 #include <gtsam/linear/Preconditioner.h>
27 #include <gtsam/dllexport.h>
28 
29 #include <memory>
30 
31 #include <map>
32 
33 namespace gtsam {
34 
35  // Forward declarations
36  class GaussianBayesNet;
37  class GaussianFactorGraph;
38  class VectorValues;
39 
41  typedef std::shared_ptr<SubgraphPreconditionerParameters> shared_ptr;
43  : builderParams(p) {}
44  SubgraphBuilderParameters builderParams;
45  };
46 
54  class GTSAM_EXPORT SubgraphPreconditioner : public Preconditioner {
55 
56  public:
57  typedef std::shared_ptr<SubgraphPreconditioner> shared_ptr;
58 
59  private:
61  GaussianBayesNet Rc1_;
62  VectorValues xbar_;
63  Errors b2bar_;
64 
65  KeyInfo keyInfo_;
67 
68  public:
69 
71 
78  SubgraphPreconditioner(const GaussianFactorGraph& Ab2, const GaussianBayesNet& Rc1, const VectorValues& xbar,
80 
81  ~SubgraphPreconditioner() override {}
82 
84  void print(const std::string& s = "SubgraphPreconditioner") const;
85 
87  const GaussianFactorGraph& Ab2() const { return Ab2_; }
88 
90  const GaussianBayesNet& Rc1() const { return Rc1_; }
91 
93  const Errors b2bar() const { return b2bar_; }
94 
100  /* x = xbar + inv(R1)*y */
101  VectorValues x(const VectorValues& y) const;
102 
103  /* A zero VectorValues with the structure of xbar */
104  VectorValues zero() const {
105  return VectorValues::Zero(xbar_);
106  }
107 
113  void transposeMultiplyAdd2(double alpha, Errors::const_iterator begin,
114  Errors::const_iterator end, VectorValues& y) const;
115 
116  /* error, given y */
117  double error(const VectorValues& y) const;
118 
120  VectorValues gradient(const VectorValues& y) const;
121 
123  Errors operator*(const VectorValues& y) const;
124 
126  void multiplyInPlace(const VectorValues& y, Errors& e) const;
127 
129  VectorValues operator^(const Errors& e) const;
130 
135  void transposeMultiplyAdd(double alpha, const Errors& e, VectorValues& y) const;
136 
137  /*****************************************************************************/
138  /* implement virtual functions of Preconditioner */
139 
141  void solve(const Vector& y, Vector &x) const override;
142 
144  void transposeSolve(const Vector& y, Vector& x) const override;
145 
147  void build(
148  const GaussianFactorGraph &gfg,
149  const KeyInfo &info,
150  const std::map<Key,Vector> &lambda
151  ) override;
152  /*****************************************************************************/
153  };
154 
155 } // namespace gtsam
Definition: SubgraphPreconditioner.h:54
vector of errors
static VectorValues Zero(const VectorValues &other)
Definition: SubgraphBuilder.h:102
Definition: Preconditioner.h:24
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition: Point2.h:52
Definition: VectorValues.h:74
const GaussianBayesNet & Rc1() const
Definition: SubgraphPreconditioner.h:90
Factor Graph Values.
GTSAM_EXPORT void print(const Matrix &A, const std::string &s, std::ostream &stream)
Definition: IterativeSolver.h:125
Definition: Preconditioner.h:64
Linear Factor Graph where all factors are Gaussians.
GTSAM_EXPORT Vector operator^(const Matrix &A, const Vector &v)
Some support classes for iterative solvers.
Definition: chartTesting.h:28
const Errors b2bar() const
Definition: SubgraphPreconditioner.h:93
Chordal Bayes Net, the result of eliminating a factor graph.
Definition: GaussianBayesNet.h:35
Definition: SubgraphPreconditioner.h:40
Definition: GaussianFactorGraph.h:73
const GaussianFactorGraph & Ab2() const
Definition: SubgraphPreconditioner.h:87