CPP/Eigen/LevenbergMarquardt

From ProgrammingExamples
< CPP
Revision as of 16:19, 4 November 2011 by Daviddoria (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

ProjectPoints.cpp

#include <iostream>
 
#include <Eigen/Dense>
 
#include <unsupported/Eigen/NonLinearOptimization>
 
struct MyFunctor
{
//   typedef Eigen::MatrixXf<float,InputsAtCompileTime,1> InputType;
//   typedef Eigen::Matrix<Scalar,ValuesAtCompileTime,1> ValueType;
//   typedef Eigen::Matrix<Scalar,ValuesAtCompileTime,InputsAtCompileTime> JacobianType;
 
  //MyFunctor();
 
  int operator()(const Eigen::VectorXd &x, Eigen::VectorXd &fvec) const
  {
    // Implement y = x^2
    fvec(0) = x(0)*x(0);
    return 0;
  }
 
  int df(const Eigen::VectorXd &x, Eigen::MatrixXd &fjac) const
  {
    // Implement dy/dx = 2*x
    fjac(0) = 2.0f * x(0);
    return 0;
  }
};
 
 
int main(int argc, char *argv[])
{
  Eigen::VectorXf x(1);
  x(0) = 2;
 
  // do the computation
  MyFunctor functor;
  Eigen::LevenbergMarquardt<MyFunctor> lm(functor);
  int info = lm.lmder1(x);
 
  // check x
  VectorXd x_ref(n);
 
  return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
 
PROJECT(LevenbergMarquardt)
include_directories(/media/portable/src/Eigen)
# FIND_PACKAGE(Eigen3 REQUIRED)
# INCLUDE(${Eigen_USE_FILE})
 
include_directories(${EIGEN3_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIR}/unsupported/)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET")
 
ADD_EXECUTABLE(LevenbergMarquardt LevenbergMarquardt.cpp )