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