12#include <boost/shared_ptr.hpp>
24struct GTSAM_EXPORT PreconditionerParameters {
26 typedef boost::shared_ptr<PreconditionerParameters> shared_ptr;
39 PreconditionerParameters(): kernel_(GTSAM), verbosity_(SILENT) {}
40 PreconditionerParameters(
const PreconditionerParameters &p) : kernel_(p.kernel_), verbosity_(p.verbosity_) {}
41 virtual ~PreconditionerParameters() {}
44 inline Kernel kernel()
const {
return kernel_; }
45 inline Verbosity verbosity()
const {
return verbosity_; }
49 virtual void print(std::ostream &os)
const;
51 static Kernel kernelTranslator(
const std::string &s);
52 static Verbosity verbosityTranslator(
const std::string &s);
53 static std::string kernelTranslator(Kernel k);
54 static std::string verbosityTranslator(Verbosity v);
57 friend std::ostream& operator<<(std::ostream &os,
const PreconditionerParameters &p);
64class GTSAM_EXPORT Preconditioner {
66 typedef boost::shared_ptr<Preconditioner> shared_ptr;
67 typedef std::vector<size_t> Dimensions;
71 virtual ~Preconditioner() {}
81 virtual void solve(
const Vector& y, Vector &x)
const = 0;
90 const std::map<Key,Vector> &lambda
95struct GTSAM_EXPORT DummyPreconditionerParameters :
public PreconditionerParameters {
96 typedef PreconditionerParameters Base;
97 typedef boost::shared_ptr<DummyPreconditionerParameters> shared_ptr;
98 DummyPreconditionerParameters() : Base() {}
99 ~DummyPreconditionerParameters()
override {}
103class GTSAM_EXPORT DummyPreconditioner :
public Preconditioner {
105 typedef Preconditioner Base;
106 typedef boost::shared_ptr<DummyPreconditioner> shared_ptr;
110 DummyPreconditioner() : Base() {}
111 ~DummyPreconditioner()
override {}
114 void solve(
const Vector& y, Vector &x)
const override { x = y; }
119 const std::map<Key,Vector> &lambda
124struct GTSAM_EXPORT BlockJacobiPreconditionerParameters :
public PreconditionerParameters {
125 typedef PreconditionerParameters Base;
126 BlockJacobiPreconditionerParameters() : Base() {}
127 ~BlockJacobiPreconditionerParameters()
override {}
131class GTSAM_EXPORT BlockJacobiPreconditioner :
public Preconditioner {
133 typedef Preconditioner Base;
134 BlockJacobiPreconditioner() ;
135 ~BlockJacobiPreconditioner()
override ;
138 void solve(
const Vector& y, Vector &x)
const override;
143 const std::map<Key,Vector> &lambda
150 std::vector<size_t> dims_;
158boost::shared_ptr<Preconditioner> createPreconditioner(
const boost::shared_ptr<PreconditionerParameters> parameters);
typedef and functions to augment Eigen's VectorXd
Global functions in a separate testing namespace.
Definition chartTesting.h:28
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
Handy data structure for iterative solvers.
Definition IterativeSolver.h:126
virtual void solve(const Vector &y, Vector &x) const =0
implement x = L^{-1} y
virtual void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda)=0
build/factorize the preconditioner
virtual void transposeSolve(const Vector &y, Vector &x) const =0
implement x = L^{-T} y
void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda) override
build/factorize the preconditioner
Definition Preconditioner.h:116
void solve(const Vector &y, Vector &x) const override
implement x = L^{-1} y
Definition Preconditioner.h:114
void transposeSolve(const Vector &y, Vector &x) const override
implement x = L^{-T} y
Definition Preconditioner.h:115
void transposeSolve(const Vector &y, Vector &x) const override
implement x = L^{-T} y
Definition Preconditioner.cpp:106
void solve(const Vector &y, Vector &x) const override
implement x = L^{-1} y
Definition Preconditioner.cpp:85
void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda) override
build/factorize the preconditioner
Definition Preconditioner.cpp:126
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74