Difference between revisions of "CPP/Eigen/LevenbergMarquardt"
From ProgrammingExamples
< CPP
Daviddoria (Talk | contribs) (Created page with '==ProjectPoints.cpp== <source lang="cpp"> #include <iostream> #include <Eigen/Dense> #include <unsupported/Eigen/NonLinearOptimization> struct MyFunctor { // typedef Eigen::…') |
Daviddoria (Talk | contribs) |
||
Line 38: | Line 38: | ||
// do the computation | // do the computation | ||
MyFunctor functor; | MyFunctor functor; | ||
− | Eigen::LevenbergMarquardt<MyFunctor> lm(functor); | + | Eigen::LevenbergMarquardt<MyFunctor, float> lm(functor); |
− | + | lm.minimize(x); | |
// check x | // check x |
Revision as of 17:23, 4 November 2011
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, float> lm(functor); lm.minimize(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 )