Extend the advice on derivatives. Extend the tips/tricks section to include more comprehensive advice on derivatives. Change-Id: Iba5768055b32a65e36d70e6f4db62eca9b331253
diff --git a/docs/source/tricks.rst b/docs/source/tricks.rst index c53ba02..2622e23 100644 --- a/docs/source/tricks.rst +++ b/docs/source/tricks.rst
@@ -4,14 +4,43 @@ Tips, Tricks & FAQs =================== -A collection of miscellanous tips, tricks and frequently asked -questions +A collection of miscellanous tips, tricks and answers to frequently +asked questions. -Derivatives -=========== +1. Use analytical/automatic derivatives when possible. -The single most important bit of advice for users of Ceres Solver is -to use analytic/automatic differentiation when you can. It is tempting -to take the easy way out and use numeric differentiation. This is a -bad idea. Numeric differentiation is slow, ill-behaved, hard to get -right and results in poor convergence behaviour. + This is the single most important piece of advice we can give to + you. It is tempting to take the easy way out and use numeric + differentiation. This is a bad idea. Numeric differentiation is + slow, ill-behaved, hard to get right, and results in poor + convergence behaviour. + + Ceres allows the user to define templated functors which will + be automatically differentiated. For most situations this is enough + and we recommend using this facility. In some cases the derivatives + are simple enough or the performance considerations are such that + the overhead of automatic differentiation is too much. In such + cases, analytic derivatives are recommended. + + The use of numerical derivatives should be a measure of last + resort, where it is simply not possible to write a templated + implementation of the cost function. + + In many cases where it is not possible to do analytic or automatic + differentiation of the entire cost function. But it is generally + the case that it is possible to decompose the cost function into + parts that need to be numerically differentiated and parts that can + be automatically or analytically differentiated. + + To this end, Ceres has extensive support for mixing analytic, + automatic and numeric differentiation. See + :class:`NumericDiffFunctor` and :class:`CostFunctionToFunctor`. + + +2. Diagnosing convergence issues. + + TBD + +3. Diagnoising performance issues. + + TBD