| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  |  * @file    GaussianFactor.h | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  |  * @brief   Linear Factor....A Gaussian | 
					
						
							|  |  |  |  * @brief   linearFactor | 
					
						
							|  |  |  |  * @author  Christian Potthast | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // \callgraph
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <boost/shared_ptr.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-11-06 13:43:03 +08:00
										 |  |  | #include <boost/tuple/tuple.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-11-02 11:50:30 +08:00
										 |  |  | #include <boost/serialization/map.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "Factor.h"
 | 
					
						
							| 
									
										
										
										
											2009-11-02 11:50:30 +08:00
										 |  |  | #include "Matrix.h"
 | 
					
						
							|  |  |  | #include "VectorConfig.h"
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-13 00:41:18 +08:00
										 |  |  | 	class GaussianConditional; | 
					
						
							| 
									
										
										
										
											2009-11-02 11:50:30 +08:00
										 |  |  | 	class Ordering; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Base Class for a linear factor. | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  |  * GaussianFactor is non-mutable (all methods const!). | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  |  * The factor value is exp(-0.5*||Ax-b||^2) | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | class GaussianFactor: public Factor<VectorConfig> { | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | public: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	typedef boost::shared_ptr<GaussianFactor> shared_ptr; | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	typedef std::map<std::string, Matrix>::iterator iterator; | 
					
						
							|  |  |  | 	typedef std::map<std::string, Matrix>::const_iterator const_iterator; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	std::map<std::string, Matrix> As_; // linear matrices
 | 
					
						
							|  |  |  | 	Vector b_; // right-hand-side
 | 
					
						
							|  |  |  | 	Vector sigmas_; // vector of standard deviations for each row in the factor
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-23 01:23:24 +08:00
										 |  |  | public: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// TODO: eradicate, as implies non-const
 | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor()  { | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** Construct Null factor */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor(const Vector& b_in) : | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		b_(b_in), sigmas_(ones(b_in.size())){ | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** Construct unary factor */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor(const std::string& key1, const Matrix& A1, | 
					
						
							| 
									
										
										
										
											2009-12-10 23:34:09 +08:00
										 |  |  | 			const Vector& b, double sigma) : | 
					
						
							|  |  |  | 		b_(b), sigmas_(repeat(b.size(),sigma)) { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		As_.insert(make_pair(key1, A1)); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-11 12:59:05 +08:00
										 |  |  | 	/** Construct unary factor with vector of sigmas*/ | 
					
						
							|  |  |  | 	GaussianFactor(const std::string& key1, const Matrix& A1, | 
					
						
							|  |  |  | 			const Vector& b, const Vector& sigmas) : | 
					
						
							|  |  |  | 		b_(b), sigmas_(sigmas) { | 
					
						
							|  |  |  | 		As_.insert(make_pair(key1, A1)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	/** Construct binary factor */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor(const std::string& key1, const Matrix& A1, | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 			const std::string& key2, const Matrix& A2, | 
					
						
							| 
									
										
										
										
											2009-12-10 23:34:09 +08:00
										 |  |  | 			const Vector& b, double sigma) : | 
					
						
							|  |  |  | 		b_(b), sigmas_(repeat(b.size(),sigma))  { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		As_.insert(make_pair(key1, A1)); | 
					
						
							|  |  |  | 		As_.insert(make_pair(key2, A2)); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** Construct ternary factor */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor(const std::string& key1, const Matrix& A1, | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 			const std::string& key2, const Matrix& A2, | 
					
						
							|  |  |  | 			const std::string& key3, const Matrix& A3, | 
					
						
							| 
									
										
										
										
											2009-12-10 23:34:09 +08:00
										 |  |  | 			const Vector& b, double sigma) : | 
					
						
							|  |  |  | 		b_(b), sigmas_(repeat(b.size(),sigma))  { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		As_.insert(make_pair(key1, A1)); | 
					
						
							|  |  |  | 		As_.insert(make_pair(key2, A2)); | 
					
						
							|  |  |  | 		As_.insert(make_pair(key3, A3)); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-22 22:27:03 +08:00
										 |  |  | 	/** Construct an n-ary factor */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor(const std::vector<std::pair<std::string, Matrix> > &terms, | 
					
						
							| 
									
										
										
										
											2009-12-10 23:34:09 +08:00
										 |  |  | 	    const Vector &b, double sigma) : | 
					
						
							|  |  |  | 	    b_(b), sigmas_(repeat(b.size(),sigma))  { | 
					
						
							| 
									
										
										
										
											2009-10-22 22:27:03 +08:00
										 |  |  | 	  for(unsigned int i=0; i<terms.size(); i++) | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	    As_.insert(terms[i]); | 
					
						
							| 
									
										
										
										
											2009-10-22 22:27:03 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	/** Construct an n-ary factor with a multiple sigmas*/ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor(const std::vector<std::pair<std::string, Matrix> > &terms, | 
					
						
							| 
									
										
										
										
											2009-12-10 23:34:09 +08:00
										 |  |  | 				const Vector &b, const Vector& sigmas) : | 
					
						
							|  |  |  | 			b_(b), sigmas_(sigmas) { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 			for (unsigned int i = 0; i < terms.size(); i++) | 
					
						
							|  |  |  | 				As_.insert(terms[i]); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	/** Construct from Conditional Gaussian */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:41:18 +08:00
										 |  |  | 	GaussianFactor(const boost::shared_ptr<GaussianConditional>& cg); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-23 01:23:24 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Constructor that combines a set of factors | 
					
						
							|  |  |  | 	 * @param factors Set of factors to combine | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 	GaussianFactor(const std::vector<shared_ptr> & factors); | 
					
						
							| 
									
										
										
										
											2009-10-23 01:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Implementing Testable virtual functions
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void print(const std::string& s = "") const; | 
					
						
							|  |  |  | 	bool equals(const Factor<VectorConfig>& lf, double tol = 1e-9) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	// Implementing Factor virtual functions
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-12 02:03:43 +08:00
										 |  |  | 	Vector unweighted_error(const VectorConfig& c) const; /** (A*x-b) */ | 
					
						
							| 
									
										
										
										
											2009-12-12 01:42:54 +08:00
										 |  |  | 	Vector error_vector(const VectorConfig& c) const; /** (A*x-b)/sigma */ | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	double error(const VectorConfig& c) const; /**  0.5*(A*x-b)'*D*(A*x-b) */ | 
					
						
							|  |  |  | 	std::size_t size() const { return As_.size();} | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** STL like, return the iterator pointing to the first node */ | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	const_iterator const begin() const { return As_.begin();} | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** STL like, return the iterator pointing to the last node */ | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	const_iterator const end() const { return As_.end();	} | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** check if empty */ | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	bool empty() const { return b_.size() == 0;} | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** get a copy of b */ | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	const Vector& get_b() const {	return b_;	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-10 05:34:20 +08:00
										 |  |  | 	/** get a copy of sigmas */ | 
					
						
							|  |  |  | 	const Vector& get_sigmas() const {	return sigmas_;	} | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * get a copy of the A matrix from a specific node | 
					
						
							|  |  |  | 	 * O(log n) | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	const Matrix& get_A(const std::string& key) const { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		const_iterator it = As_.find(key); | 
					
						
							|  |  |  | 		if (it == As_.end()) | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | 			throw(std::invalid_argument("GaussianFactor::[] invalid key: " + key)); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 		return it->second; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** operator[] syntax for get */ | 
					
						
							|  |  |  | 	inline const Matrix& operator[](const std::string& name) const { | 
					
						
							|  |  |  | 		return get_A(name); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** Check if factor involves variable with key */ | 
					
						
							|  |  |  | 	bool involves(const std::string& key) const { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		const_iterator it = As_.find(key); | 
					
						
							|  |  |  | 		return (it != As_.end()); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * return the number of rows from the b vector | 
					
						
							|  |  |  | 	 * @return a integer with the number of rows from the b vector | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	int numberOfRows() const { return b_.size();} | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-12 11:50:44 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Find all variables | 
					
						
							|  |  |  | 	 * @return The set of all variable keys | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2009-09-13 12:13:03 +08:00
										 |  |  | 	 std::list<std::string> keys() const; | 
					
						
							| 
									
										
										
										
											2009-09-12 11:50:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Find all variables and their dimensions | 
					
						
							|  |  |  | 	 * @return The set of all variable/dimension pairs | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2009-11-06 13:43:03 +08:00
										 |  |  | 	Dimensions dimensions() const; | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Get the dimension of a particular variable | 
					
						
							|  |  |  | 	 * @param key is the name of the variable | 
					
						
							|  |  |  | 	 * @return the size of the variable | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	size_t getDim(const std::string& key) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Add to separator set if this factor involves key, but don't add key itself | 
					
						
							|  |  |  | 	 * @param key | 
					
						
							|  |  |  | 	 * @param separator set to add to | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	void tally_separator(const std::string& key, | 
					
						
							|  |  |  | 			std::set<std::string>& separator) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Return (dense) matrix associated with factor | 
					
						
							|  |  |  | 	 * @param ordering of variables needed for matrix column order | 
					
						
							| 
									
										
										
										
											2009-11-11 22:42:09 +08:00
										 |  |  | 	 * @param set weight to true to bake in the weights | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2009-11-11 22:42:09 +08:00
										 |  |  | 	std::pair<Matrix, Vector> matrix(const Ordering& ordering, bool weight = true) const; | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-05 23:08:58 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Return (dense) matrix associated with factor | 
					
						
							|  |  |  | 	 * The returned system is an augmented matrix: [A b] | 
					
						
							| 
									
										
										
										
											2009-11-10 05:34:20 +08:00
										 |  |  | 	 * The standard deviations are NOT baked into A and b | 
					
						
							| 
									
										
										
										
											2009-11-05 23:08:58 +08:00
										 |  |  | 	 * @param ordering of variables needed for matrix column order | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	Matrix matrix_augmented(const Ordering& ordering) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-06 13:43:03 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Return vectors i, j, and s to generate an m-by-n sparse matrix | 
					
						
							|  |  |  | 	 * such that S(i(k),j(k)) = s(k), which can be given to MATLAB's sparse. | 
					
						
							|  |  |  | 	 * As above, the standard deviations are baked into A and b | 
					
						
							| 
									
										
										
										
											2009-12-12 14:18:29 +08:00
										 |  |  | 	 * @param first column index for each variable | 
					
						
							| 
									
										
										
										
											2009-11-06 13:43:03 +08:00
										 |  |  | 	 */ | 
					
						
							|  |  |  | 	boost::tuple<std::list<int>, std::list<int>, std::list<double> > | 
					
						
							| 
									
										
										
										
											2009-12-12 14:18:29 +08:00
										 |  |  | 		sparse(const Dimensions& columnIndices) const; | 
					
						
							| 
									
										
										
										
											2009-11-06 13:43:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-11 12:59:05 +08:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Add gradient contribution to gradient config g | 
					
						
							|  |  |  | 	 * @param x: confif at which to evaluate gradient | 
					
						
							|  |  |  | 	 * @param g: I/O parameter, evolving gradient | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	void addGradientContribution(const VectorConfig& x, VectorConfig& g) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Create a GaussianFactor on one variable 'alpha' (step size), in direction d | 
					
						
							|  |  |  | 	 * @param x: starting point for search | 
					
						
							|  |  |  | 	 * @param d: search direction | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	shared_ptr alphaFactor(const VectorConfig& x, const VectorConfig& d) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-23 01:23:24 +08:00
										 |  |  | 	/* ************************************************************************* */ | 
					
						
							|  |  |  | 	// MUTABLE functions. FD:on the path to being eradicated
 | 
					
						
							|  |  |  | 	/* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** insert, copies A */ | 
					
						
							|  |  |  | 	void insert(const std::string& key, const Matrix& A) { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		As_.insert(std::make_pair(key, A)); | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** set RHS, copies b */ | 
					
						
							|  |  |  | 	void set_b(const Vector& b) { | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 		this->b_ = b; | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// set A matrices for the linear factor, same as insert ?
 | 
					
						
							|  |  |  | 	inline void set_A(const std::string& key, const Matrix &A) { | 
					
						
							|  |  |  | 		insert(key, A); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							| 
									
										
										
										
											2009-11-05 04:59:16 +08:00
										 |  |  | 	 * Current Implementation: Full QR factorization | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 	 * eliminate (in place!) one of the variables connected to this factor | 
					
						
							|  |  |  | 	 * @param key the key of the node to be eliminated | 
					
						
							|  |  |  | 	 * @return a new factor and a conditional gaussian on the eliminated variable | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2009-11-13 00:41:18 +08:00
										 |  |  | 	std::pair<boost::shared_ptr<GaussianConditional>, shared_ptr> | 
					
						
							| 
									
										
										
										
											2009-11-12 12:53:28 +08:00
										 |  |  | 	eliminate(const std::string& key) const; | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Take the factor f, and append to current matrices. Not very general. | 
					
						
							|  |  |  | 	 * @param f linear factor graph | 
					
						
							|  |  |  | 	 * @param m final number of rows of f, needs to be known in advance | 
					
						
							|  |  |  | 	 * @param pos where to insert in the m-sized matrices | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2009-12-11 04:19:15 +08:00
										 |  |  | 	void append_factor(GaussianFactor::shared_ptr f, size_t m, size_t pos); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-13 00:16:32 +08:00
										 |  |  | }; // GaussianFactor
 | 
					
						
							| 
									
										
										
										
											2009-10-23 01:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-27 21:33:44 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * creates a C++ string a la "x3", "m768" | 
					
						
							|  |  |  |  * @param c the base character | 
					
						
							|  |  |  |  * @param index the integer to be added | 
					
						
							|  |  |  |  * @return a C++ string | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | std::string symbol(char c, int index); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | } // namespace gtsam
 |