diff --git a/.cproject b/.cproject
index b10acf8da..a974f16d4 100644
--- a/.cproject
+++ b/.cproject
@@ -1522,6 +1522,30 @@
true
true
+
+ make
+ -j4
+ testSmartProjectionPoseFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j4
+ testRegularImplicitSchurFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j4
+ testRegularJacobianFactor.run
+ true
+ true
+ true
+
make
-j3
diff --git a/gtsam/linear/ConjugateGradientSolver.cpp b/gtsam/linear/ConjugateGradientSolver.cpp
index 5e7e08f61..a1b9e2d83 100644
--- a/gtsam/linear/ConjugateGradientSolver.cpp
+++ b/gtsam/linear/ConjugateGradientSolver.cpp
@@ -1,8 +1,20 @@
+/* ----------------------------------------------------------------------------
+
+ * GTSAM Copyright 2010, Georgia Tech Research Corporation,
+ * Atlanta, Georgia 30332-0415
+ * All Rights Reserved
+ * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
+
+ * See LICENSE for the license information
+
+ * -------------------------------------------------------------------------- */
+
/*
- * ConjugateGradientSolver.cpp
- *
- * Created on: Jun 4, 2014
- * Author: Yong-Dian Jian
+ * @file ConjugateGradientSolver.cpp
+ * @brief Implementation of Conjugate Gradient solver for a linear system
+ * @author Yong-Dian Jian
+ * @author Sungtae An
+ * @date Nov 6, 2014
*/
#include
@@ -35,7 +47,8 @@ std::string ConjugateGradientParameters::blasTranslator(const BLASKernel value)
}
/*****************************************************************************/
-ConjugateGradientParameters::BLASKernel ConjugateGradientParameters::blasTranslator(const std::string &src) {
+ConjugateGradientParameters::BLASKernel ConjugateGradientParameters::blasTranslator(
+ const std::string &src) {
std::string s = src; boost::algorithm::to_upper(s);
if (s == "GTSAM") return ConjugateGradientParameters::GTSAM;
@@ -43,6 +56,7 @@ ConjugateGradientParameters::BLASKernel ConjugateGradientParameters::blasTransla
return ConjugateGradientParameters::GTSAM;
}
+/*****************************************************************************/
}
diff --git a/gtsam/linear/ConjugateGradientSolver.h b/gtsam/linear/ConjugateGradientSolver.h
index 20e0c5262..2596a7403 100644
--- a/gtsam/linear/ConjugateGradientSolver.h
+++ b/gtsam/linear/ConjugateGradientSolver.h
@@ -20,7 +20,6 @@
#pragma once
#include
-#include
namespace gtsam {
@@ -87,9 +86,8 @@ public:
static BLASKernel blasTranslator(const std::string &s) ;
};
-/*********************************************************************************************/
/*
- * A template of linear preconditioned conjugate gradient method.
+ * A template for the linear preconditioned conjugate gradient method.
* System class should support residual(v, g), multiply(v,Av), scal(alpha,v), dot(v,v), axpy(alpha,x,y)
* leftPrecondition(v, L^{-1}v, rightPrecondition(v, L^{-T}v) where preconditioner M = L*L^T
* Note that the residual is in the preconditioned domain. Refer to Section 9.2 of Saad's book.
@@ -98,8 +96,9 @@ public:
* [1] Y. Saad, "Preconditioned Iterations," in Iterative Methods for Sparse Linear Systems,
* 2nd ed. SIAM, 2003, ch. 9, sec. 2, pp.276-281.
*/
-template
-V preconditionedConjugateGradient(const S &system, const V &initial, const ConjugateGradientParameters ¶meters) {
+template
+V preconditionedConjugateGradient(const S &system, const V &initial,
+ const ConjugateGradientParameters ¶meters) {
V estimate, residual, direction, q1, q2;
estimate = residual = direction = q1 = q2 = initial;
diff --git a/gtsam/linear/IterativeSolver.cpp b/gtsam/linear/IterativeSolver.cpp
index ab3ccde13..79ade1c8a 100644
--- a/gtsam/linear/IterativeSolver.cpp
+++ b/gtsam/linear/IterativeSolver.cpp
@@ -1,6 +1,17 @@
+/* ----------------------------------------------------------------------------
+
+ * GTSAM Copyright 2010, Georgia Tech Research Corporation,
+ * Atlanta, Georgia 30332-0415
+ * All Rights Reserved
+ * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
+
+ * See LICENSE for the license information
+
+ * -------------------------------------------------------------------------- */
+
/**
* @file IterativeSolver.cpp
- * @brief
+ * @brief Some support classes for iterative solvers
* @date Sep 3, 2012
* @author Yong-Dian Jian
*/
@@ -9,18 +20,22 @@
#include
#include
#include
+#include
#include
-#include
using namespace std;
namespace gtsam {
/*****************************************************************************/
-string IterativeOptimizationParameters::getVerbosity() const { return verbosityTranslator(verbosity_); }
+string IterativeOptimizationParameters::getVerbosity() const {
+ return verbosityTranslator(verbosity_);
+}
/*****************************************************************************/
-void IterativeOptimizationParameters::setVerbosity(const string &src) { verbosity_ = verbosityTranslator(src); }
+void IterativeOptimizationParameters::setVerbosity(const string &src) {
+ verbosity_ = verbosityTranslator(src);
+}
/*****************************************************************************/
void IterativeOptimizationParameters::print() const {
@@ -29,78 +44,82 @@ void IterativeOptimizationParameters::print() const {
/*****************************************************************************/
void IterativeOptimizationParameters::print(ostream &os) const {
- os << "IterativeOptimizationParameters:" << endl
- << "verbosity: " << verbosityTranslator(verbosity_) << endl;
+ os << "IterativeOptimizationParameters:" << endl << "verbosity: "
+ << verbosityTranslator(verbosity_) << endl;
}
/*****************************************************************************/
- ostream& operator<<(ostream &os, const IterativeOptimizationParameters &p) {
+ostream& operator<<(ostream &os, const IterativeOptimizationParameters &p) {
p.print(os);
return os;
}
/*****************************************************************************/
-IterativeOptimizationParameters::Verbosity IterativeOptimizationParameters::verbosityTranslator(const string &src) {
- string s = src; boost::algorithm::to_upper(s);
- if (s == "SILENT") return IterativeOptimizationParameters::SILENT;
- else if (s == "COMPLEXITY") return IterativeOptimizationParameters::COMPLEXITY;
- else if (s == "ERROR") return IterativeOptimizationParameters::ERROR;
+IterativeOptimizationParameters::Verbosity IterativeOptimizationParameters::verbosityTranslator(
+ const string &src) {
+ string s = src;
+ boost::algorithm::to_upper(s);
+ if (s == "SILENT")
+ return IterativeOptimizationParameters::SILENT;
+ else if (s == "COMPLEXITY")
+ return IterativeOptimizationParameters::COMPLEXITY;
+ else if (s == "ERROR")
+ return IterativeOptimizationParameters::ERROR;
/* default is default */
- else return IterativeOptimizationParameters::SILENT;
+ else
+ return IterativeOptimizationParameters::SILENT;
}
/*****************************************************************************/
- string IterativeOptimizationParameters::verbosityTranslator(IterativeOptimizationParameters::Verbosity verbosity) {
- if (verbosity == SILENT) return "SILENT";
- else if (verbosity == COMPLEXITY) return "COMPLEXITY";
- else if (verbosity == ERROR) return "ERROR";
- else return "UNKNOWN";
+string IterativeOptimizationParameters::verbosityTranslator(
+ IterativeOptimizationParameters::Verbosity verbosity) {
+ if (verbosity == SILENT)
+ return "SILENT";
+ else if (verbosity == COMPLEXITY)
+ return "COMPLEXITY";
+ else if (verbosity == ERROR)
+ return "ERROR";
+ else
+ return "UNKNOWN";
}
/*****************************************************************************/
-VectorValues IterativeSolver::optimize(
- const GaussianFactorGraph &gfg,
+VectorValues IterativeSolver::optimize(const GaussianFactorGraph &gfg,
boost::optional keyInfo,
- boost::optional&> lambda)
-{
- return optimize(
- gfg,
- keyInfo ? *keyInfo : KeyInfo(gfg),
- lambda ? *lambda : std::map());
+ boost::optional&> lambda) {
+ return optimize(gfg, keyInfo ? *keyInfo : KeyInfo(gfg),
+ lambda ? *lambda : std::map());
}
/*****************************************************************************/
-VectorValues IterativeSolver::optimize (
- const GaussianFactorGraph &gfg,
- const KeyInfo &keyInfo,
- const std::map &lambda)
-{
+VectorValues IterativeSolver::optimize(const GaussianFactorGraph &gfg,
+ const KeyInfo &keyInfo, const std::map &lambda) {
return optimize(gfg, keyInfo, lambda, keyInfo.x0());
}
/****************************************************************************/
-KeyInfo::KeyInfo(const GaussianFactorGraph &fg, const Ordering &ordering)
- : ordering_(ordering) {
+KeyInfo::KeyInfo(const GaussianFactorGraph &fg, const Ordering &ordering) :
+ ordering_(ordering) {
initialize(fg);
}
/****************************************************************************/
-KeyInfo::KeyInfo(const GaussianFactorGraph &fg)
- : ordering_(Ordering::Natural(fg)) {
+KeyInfo::KeyInfo(const GaussianFactorGraph &fg) :
+ ordering_(Ordering::Natural(fg)) {
initialize(fg);
}
/****************************************************************************/
-void KeyInfo::initialize(const GaussianFactorGraph &fg){
+void KeyInfo::initialize(const GaussianFactorGraph &fg) {
const map colspec = fg.getKeyDimMap();
const size_t n = ordering_.size();
size_t start = 0;
- for ( size_t i = 0 ; i < n ; ++i ) {
+ for (size_t i = 0; i < n; ++i) {
const size_t key = ordering_[i];
const size_t dim = colspec.find(key)->second;
insert(make_pair(key, KeyInfoEntry(i, dim, start)));
- start += dim ;
+ start += dim;
}
numCols_ = start;
}
@@ -108,7 +127,7 @@ void KeyInfo::initialize(const GaussianFactorGraph &fg){
/****************************************************************************/
vector KeyInfo::colSpec() const {
std::vector result(size(), 0);
- BOOST_FOREACH ( const gtsam::KeyInfo::value_type &item, *this ) {
+ BOOST_FOREACH ( const KeyInfo::value_type &item, *this ) {
result[item.second.index()] = item.second.dim();
}
return result;
@@ -117,7 +136,7 @@ vector KeyInfo::colSpec() const {
/****************************************************************************/
VectorValues KeyInfo::x0() const {
VectorValues result;
- BOOST_FOREACH ( const gtsam::KeyInfo::value_type &item, *this ) {
+ BOOST_FOREACH ( const KeyInfo::value_type &item, *this ) {
result.insert(item.first, Vector::Zero(item.second.dim()));
}
return result;
@@ -128,7 +147,5 @@ Vector KeyInfo::x0vector() const {
return Vector::Zero(numCols_);
}
-
}
-
diff --git a/gtsam/linear/IterativeSolver.h b/gtsam/linear/IterativeSolver.h
index d6e1b6e98..442a5fc6b 100644
--- a/gtsam/linear/IterativeSolver.h
+++ b/gtsam/linear/IterativeSolver.h
@@ -9,131 +9,178 @@
* -------------------------------------------------------------------------- */
+/**
+ * @file IterativeSolver.h
+ * @brief Some support classes for iterative solvers
+ * @date 2010
+ * @author Yong-Dian Jian
+ */
+
#pragma once
-#include
-#include
#include
+#include
+
#include
-#include
-#include
+#include
+#include
+
#include
-#include