|
gtsam
4.0.0
gtsam
|
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 |
| Add zero-mean i.i.d. More... | |
| 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 |
| gradient = y + inv(R1')*A2'*(A2*inv(R1)*y-b2bar) | |
| 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< SubgraphPreconditioner > | shared_ptr |
| typedef boost::shared_ptr< const GaussianBayesNet > | sharedBayesNet |
| typedef boost::shared_ptr< const GaussianFactorGraph > | sharedFG |
| typedef boost::shared_ptr< const VectorValues > | sharedValues |
| typedef boost::shared_ptr< const Errors > | sharedErrors |
Public Types inherited from gtsam::Preconditioner | |
| typedef boost::shared_ptr< Preconditioner > | shared_ptr |
| typedef std::vector< size_t > | Dimensions |
| gtsam::SubgraphPreconditioner::SubgraphPreconditioner | ( | const sharedFG & | Ab2, |
| const sharedBayesNet & | Rc1, | ||
| const sharedValues & | xbar, | ||
| const SubgraphPreconditionerParameters & | p = SubgraphPreconditionerParameters() |
||
| ) |
Constructor.
| Ab2 | the Graph A2*x=b2 |
| Rc1 | the Bayes Net R1*x=c1 |
| xbar | the solution to R1*x=c1 |
| VectorValues gtsam::SubgraphPreconditioner::x | ( | const VectorValues & | y | ) | const |
Add zero-mean i.i.d.
Gaussian prior terms to each variable
| sigma | Standard deviation of Gaussian |