From e0f9f7a33e5a70cf002b77a176b76c330c2e6c08 Mon Sep 17 00:00:00 2001 From: dellaert Date: Sun, 23 Nov 2014 23:16:04 +0100 Subject: [PATCH] Fourier prototype that unfortunately does not compile --- .../tests/testBasisDecompositions.cpp | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/gtsam_unstable/nonlinear/tests/testBasisDecompositions.cpp b/gtsam_unstable/nonlinear/tests/testBasisDecompositions.cpp index db6023629..acd325194 100644 --- a/gtsam_unstable/nonlinear/tests/testBasisDecompositions.cpp +++ b/gtsam_unstable/nonlinear/tests/testBasisDecompositions.cpp @@ -32,19 +32,60 @@ using namespace gtsam; noiseModel::Diagonal::shared_ptr model = noiseModel::Unit::Create(1); +/// Fourier +template +class Fourier { + +public: + + typedef Eigen::Matrix Coefficients; + typedef Eigen::Matrix Jacobian; + +private: + + double x_; + Jacobian H_; + +public: + + /// Constructor + Fourier(double x) : + x_(x) { + H_(0, 0) = 1; + for (size_t i = 1; i < N; i += 2) { + H_(0, i) = cos(i * x); + H_(0, i + 1) = sin(i * x); + } + } + + /// Given coefficients c, predict value for x + double operator()(const Coefficients& c, boost::optional H) { + return H_ * c; + } +}; + //****************************************************************************** TEST(BasisDecompositions, Fourier) { // Create linear factor graph GaussianFactorGraph g; Key key(1); + Vector3_ c(key); for (size_t i = 0; i < 16; i++) { double x = i * M_PI / 8, y = exp(sin(x) + cos(x)); + + // Manual JacobianFactor Matrix A(1, 3); A << 1, cos(x), sin(x); Vector b(1); b << y; - g.add(key, A, b, model); + JacobianFactor f1(key, A, b, model); + + // With ExpressionFactor + Expression expression(Fourier<3>(x), c); + ExpressionFactor f2(model, y, expression); + + g.add(f1); } // Solve