12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- .. default-domain:: cpp
- .. cpp:namespace:: ceres
- .. _chapter-on_derivatives:
- ==============
- On Derivatives
- ==============
- Ceres Solver, like all gradient based optimization algorithms, depends
- on being able to evaluate the objective function and its derivatives
- at arbitrary points in its domain. Indeed, defining the objective
- function and its `Jacobian
- <https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant>`_ is
- the principal task that the user is required to perform when solving
- an optimization problem using Ceres Solver. The correct and efficient
- computation of the Jacobian is the key to good performance.
- Ceres Solver offers considerable flexibility in how the user can
- provide derivatives to the solver. She can use:
- #. :ref:`chapter-analytical_derivatives`: The user figures out the
- derivatives herself, by hand or using a tool like `Maple
- <https://www.maplesoft.com/products/maple/>`_ or `Mathematica
- <https://www.wolfram.com/mathematica/>`_, and implements them in a
- :class:`CostFunction`.
- #. :ref:`chapter-numerical_derivatives`: Ceres numerically computes
- the derivative using finite differences.
- #. :ref:`chapter-automatic_derivatives`: Ceres automatically computes
- the analytic derivative using C++ templates and operator
- overloading.
- Which of these three approaches (alone or in combination) should be
- used depends on the situation and the tradeoffs the user is willing to
- make. Unfortunately, numerical optimization textbooks rarely discuss
- these issues in detail and the user is left to her own devices.
- The aim of this article is to fill this gap and describe each of these
- three approaches in the context of Ceres Solver with sufficient detail
- that the user can make an informed choice.
- For the impatient amongst you, here is some high level advice:
- #. Use :ref:`chapter-automatic_derivatives`.
- #. In some cases it maybe worth using
- :ref:`chapter-analytical_derivatives`.
- #. Avoid :ref:`chapter-numerical_derivatives`. Use it as a measure of
- last resort, mostly to interface with external libraries.
- For the rest, read on.
- .. toctree::
- :maxdepth: 1
- spivak_notation
- analytical_derivatives
- numerical_derivatives
- automatic_derivatives
- interfacing_with_autodiff
- inverse_and_implicit_function_theorems
|