api_documentation: http://ros.org/doc/electric/api/cminpack/html
authors: "Fr\xE9d\xE9ric Devernay"
brief: CMinpack
bugtracker: ''
depends: ''
depends_on:
- pcl
description: "\n\n<p>\n    <em>This is the official description of Minpack, from the\
  \ original ReadMe file:</em>\n    Minpack includes software for solving nonlinear\
  \ equations and nonlinear\n    least squares problems. Five algorithmic paths each\
  \ include a core\n    subroutine and an easy-to-use driver. The algorithms proceed\
  \ either from an\n    analytic specification of the Jacobian matrix or directly\
  \ from the problem\n    functions. The paths include facilities for systems of equations\
  \ with a\n    banded Jacobian matrix, for least squares problems with a large amount\
  \ of\n    data, and for checking the consistency of the Jacobian matrix with the\n\
  \    functions.\n</p>\n<p>\n    Minpack is probably the best open-source implementation\
  \ of the\n    Levenberg-Marquardt algorithm (in fact, it is even better, since it\
  \ adds to\n    L-M automatic variables scaling). There is another open-source L-M\n\
  \    implementation in C/C++, levmar by Manolis Lourakis, but unfortunately is is\n\
  \    released under the GPL, which restricts its inclusion in commercial\n    software.\
  \ Minpack is licensed under a BSD-like license (available in the\n    distribution).\n\
  </p>\n<p>\n    I took a dozen of hours to rework all these problems, and came out\
  \ with a\n    pure C version of Minpack, with has standard (ISO C99) parameters\
  \ passing,\n    is fully reentrant, multithread-safe, and has a full set of examples\
  \ and\n    tests:\n</p>\n<p>\n      1. Input variables are now passed by value,\
  \ output variables are passed by\n      reference. The keyword &quot;const&quot;\
  \ is used as much as possible for constant\n      arrays. The return value of each\
  \ function is now used to get the function\n      status (it was obtained via the\
  \ IFLAG or INFO parameter in Minpack).\n</p>\n<p>\n      2. All non-const static\
  \ variables were removed, and the code was tested\n      after that. Luckily, Minpack\
  \ didn't use the nastiest feature in FORTRAN: all\n      local variables are static,\
  \ so that a function can behave differently when\n      you call it several times.\n\
  </p>\n<p>\n      3. The function to be minimized and all the Minpack functions now\
  \ take\n      an extra &quot;void*&quot; argument, which can be used to pass any\n\
  \      pointer-to-struct or pointer-to-class, and you can put all you extra\n  \
  \    parameters and datd in that struct. Just cast this pointer to the\n      appropriate\
  \ pointer type in your function, and there they are! There\n      is no need for\
  \ global variables anymore. Be careful if you access the\n      same object from\
  \ different threads, though.\n</p>\n<p>\n      4. The Debian project did a C include\
  \ file for Minpack. It still needed some\n      work (add consts and C++ compatibility),\
  \ so I did this work, and used the\n      include file for the FORTRAN version as\
  \ the base for my C/C++ version.\n</p>\n<p>\n      5. The Debian project also translated\
  \ all the FORTRAN examples to C. I\n      worked from these to produce examples\
  \ which also call my C/C++ version of\n      Minpack instead of the FORTRAN version.\
  \ Also included in the distribution\n      are reference output files produced by\
  \ the test runs (for comparison).\n</p>\n  "
doc_job: doc-electric-perception_pcl
license: BSD
maintainers: ''
metapackages:
- perception_pcl
msgs: []
package_type: package
repo_name: perception_pcl
repo_url: ''
srvs: []
timestamp: 1362155152.020875
url: http://devernay.free.fr/hacks/cminpack.html
vcs: svn
vcs_uri: http://svn.pointclouds.org/ros/branches/electric/perception_pcl
vcs_version: null
