gtsam  4.1.0 gtsam
gtsam::SubgraphPreconditioner Class Reference

Detailed Description

Subgraph conditioner class, as explained in the RSS 2010 submission.

Starting with a graph A*x=b, we split it in two systems A1*x=b1 and A2*x=b2 We solve R1*x=c1, and make the substitution y=R1*x-c1. To use the class, give the Bayes Net R1*x=c1 and Graph A2*x=b2. Then solve for yhat using CG, and solve for xhat = system.x(yhat).

Inheritance diagram for gtsam::SubgraphPreconditioner:

Public Member Functions

SubgraphPreconditioner (const SubgraphPreconditionerParameters &p=SubgraphPreconditionerParameters())

SubgraphPreconditioner (const sharedFG &Ab2, const sharedBayesNet &Rc1, const sharedValues &xbar, const SubgraphPreconditionerParameters &p=SubgraphPreconditionerParameters())
Constructor. More...

void print (const std::string &s="SubgraphPreconditioner") const
print the object

const sharedFG & Ab2 () const
Access Ab2.

const sharedBayesNet & Rc1 () const
Access Rc1.

const sharedErrors b2bar () const
Access b2bar.

VectorValues x (const VectorValues &y) const

VectorValues zero () const

void transposeMultiplyAdd2 (double alpha, Errors::const_iterator begin, Errors::const_iterator end, VectorValues &y) const
Add constraint part of the error only y += alpha*inv(R1')*A2'*e2 Takes a range indicating e2 !!!!

double error (const VectorValues &y) const

VectorValues gradient (const VectorValues &y) const

Errors operator* (const VectorValues &y) const
Apply operator A.

void multiplyInPlace (const VectorValues &y, Errors &e) const
Apply operator A in place: needs e allocated already.

VectorValues operator^ (const Errors &e) const
Apply operator A'.

void transposeMultiplyAdd (double alpha, const Errors &e, VectorValues &y) const
Add A'e to y y += alpha*A'[e1;e2] = [alpha*e1; alpha*inv(R1')*A2'*e2].

void solve (const Vector &y, Vector &x) const override
implement x = R^{-1} y

void transposeSolve (const Vector &y, Vector &x) const override
implement x = R^{-T} y

void build (const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda) override
build/factorize the preconditioner

Public Types

typedef boost::shared_ptr< SubgraphPreconditionershared_ptr

typedef boost::shared_ptr< const GaussianBayesNetsharedBayesNet

typedef boost::shared_ptr< const GaussianFactorGraphsharedFG

typedef boost::shared_ptr< const VectorValuessharedValues

Public Types inherited from gtsam::Preconditioner
typedef boost::shared_ptr< Preconditionershared_ptr

typedef std::vector< size_t > Dimensions

◆ SubgraphPreconditioner()

 gtsam::SubgraphPreconditioner::SubgraphPreconditioner ( const sharedFG & Ab2, const sharedBayesNet & Rc1, const sharedValues & xbar, const SubgraphPreconditionerParameters & p = SubgraphPreconditionerParameters() )

Constructor.

Parameters
 Ab2 the Graph A2*x=b2 Rc1 the Bayes Net R1*x=c1 xbar the solution to R1*x=c1

◆ x()

 VectorValues gtsam::SubgraphPreconditioner::x ( const VectorValues & y ) const