58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
/**
 | 
						|
 * @file    Factorization
 | 
						|
 * @brief   Template Linear solver class that uses a Gaussian Factor Graph
 | 
						|
 * @author  Kai Ni
 | 
						|
 * @author  Frank Dellaert
 | 
						|
 */ 
 | 
						|
 | 
						|
// $Id: GaussianFactorGraph.h,v 1.24 2009/08/14 20:48:51 acunning Exp $
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <stdexcept>
 | 
						|
#include "GaussianFactorGraph.h"
 | 
						|
 | 
						|
namespace gtsam {
 | 
						|
 | 
						|
	class Ordering;
 | 
						|
 | 
						|
  /**
 | 
						|
   * A linear system solver using factorization
 | 
						|
   */
 | 
						|
  template <class NonlinearGraph, class Config>
 | 
						|
  class Factorization {
 | 
						|
  private:
 | 
						|
  	boost::shared_ptr<const Ordering> ordering_;
 | 
						|
  	bool useOldEliminate_;
 | 
						|
 | 
						|
  public:
 | 
						|
  	Factorization(boost::shared_ptr<const Ordering> ordering, bool old=true)
 | 
						|
		: ordering_(ordering), useOldEliminate_(old) {
 | 
						|
  		if (!ordering) throw std::invalid_argument("Factorization constructor: ordering = NULL");
 | 
						|
  	}
 | 
						|
 | 
						|
  	/**
 | 
						|
  	 * solve for the optimal displacement in the tangent space, and then solve
 | 
						|
  	 * the resulted linear system
 | 
						|
  	 */
 | 
						|
  	VectorConfig optimize(GaussianFactorGraph& fg) const {
 | 
						|
  		return fg.optimize(*ordering_, useOldEliminate_);
 | 
						|
  	}
 | 
						|
 | 
						|
		/**
 | 
						|
		 * linearize the non-linear graph around the current config
 | 
						|
		 */
 | 
						|
  	boost::shared_ptr<GaussianFactorGraph> linearize(const NonlinearGraph& g, const Config& config) const {
 | 
						|
  		return g.linearize(config);
 | 
						|
  	}
 | 
						|
 | 
						|
  	/**
 | 
						|
  	 * Does not do anything here in Factorization.
 | 
						|
  	 */
 | 
						|
  	boost::shared_ptr<Factorization> prepareLinear(const GaussianFactorGraph& fg) const {
 | 
						|
  		return boost::shared_ptr<Factorization>(new Factorization(*this));
 | 
						|
  	}
 | 
						|
  };
 | 
						|
 | 
						|
}
 |