Fix the documentation for CostFunction::Evaluate. The documentation was overly complex and had mismatched symbols leading to confusion. Change-Id: I25709e61ff3f9b9775d8f14a9e63f61931256dac
diff --git a/docs/source/nnls_modeling.rst b/docs/source/nnls_modeling.rst index 36ee550..88df6b8 100644 --- a/docs/source/nnls_modeling.rst +++ b/docs/source/nnls_modeling.rst
@@ -61,14 +61,16 @@ ===================== For each term in the objective function, a :class:`CostFunction` is -responsible for computing a vector of residuals and if asked a vector -of Jacobian matrices, i.e., given :math:`\left[x_{i_1}, ... , -x_{i_k}\right]`, compute the vector -:math:`f_i\left(x_{i_1},...,x_{i_k}\right)` and the matrices +responsible for computing a vector of residuals and Jacobian +matrices. Concretely, consider a function +:math:`f\left(x_{1},...,x_{k}\right)` that depends on parameter blocks +:math:`\left[x_{1}, ... , x_{k}\right]`. - .. math:: J_{ij} = \frac{\partial}{\partial - x_{i_j}}f_i\left(x_{i_1},...,x_{i_k}\right),\quad \forall j - \in \{1, \ldots, k\} +Then, given :math:`\left[x_{1}, ... , x_{k}\right]`, +:class:`CostFunction` is responsible for computing the vector +:math:`f\left(x_{1},...,x_{k}\right)` and the Jacobian matrices + +.. math:: J_i = \frac{\partial}{\partial x_i} f(x_1, ..., x_k) \quad \forall i \in \{1, \ldots, k\} .. class:: CostFunction @@ -100,37 +102,43 @@ Compute the residual vector and the Jacobian matrices. - ``parameters`` is an array of pointers to arrays containing the - various parameter blocks. ``parameters`` has the same number of - elements as :member:`CostFunction::parameter_block_sizes_` and the - parameter blocks are in the same order as - :member:`CostFunction::parameter_block_sizes_`. + ``parameters`` is an array of arrays of size + :member:`CostFunction::parameter_block_sizes_.size()` and + ``parameters[i]`` is an array of size + ``parameter_block_sizes_[i]`` that contains the + :math:`i^{\text{th}}` parameter block that the ``CostFunction`` + depends on. + + ``parameters`` is never ``NULL``. ``residuals`` is an array of size ``num_residuals_``. - ``jacobians`` is an array of size - :member:`CostFunction::parameter_block_sizes_` containing pointers - to storage for Jacobian matrices corresponding to each parameter - block. The Jacobian matrices are in the same order as - :member:`CostFunction::parameter_block_sizes_`. ``jacobians[i]`` is - an array that contains :member:`CostFunction::num_residuals_` x - :member:`CostFunction::parameter_block_sizes_` ``[i]`` - elements. Each Jacobian matrix is stored in row-major order, i.e., - ``jacobians[i][r * parameter_block_size_[i] + c]`` = - :math:`\frac{\partial residual[r]}{\partial parameters[i][c]}` + ``residuals`` is never ``NULL``. + ``jacobians`` is an array of arrays of size + :member:`CostFunction::parameter_block_sizes_.size()`. - If ``jacobians`` is ``NULL``, then no derivatives are returned; - this is the case when computing cost only. If ``jacobians[i]`` is - ``NULL``, then the Jacobian matrix corresponding to the - :math:`i^{\textrm{th}}` parameter block must not be returned, this - is the case when a parameter block is marked constant. + If ``jacobians`` is ``NULL``, the user is only expected to compute + the residuals. - **NOTE** The return value indicates whether the computation of the - residuals and/or jacobians was successful or not. + ``jacobians[i]`` is a row-major array of size ``num_residuals x + parameter_block_sizes_[i]``. - This can be used to communicate numerical failures in Jacobian - computations for instance. + If ``jacobians[i]`` is **not** ``NULL``, the user is required to + compute the Jacobian of the residual vector with respect to + ``parameters[i]`` and store it in this array, i.e. + + ``jacobians[i][r * parameter_block_sizes_[i] + c]`` = + :math:`\frac{\displaystyle \partial \text{residual}[r]}{\displaystyle \partial \text{parameters}[i][c]}` + + If ``jacobians[i]`` is ``NULL``, then this computation can be + skipped. This is the case when the corresponding parameter block is + marked constant. + + The return value indicates whether the computation of the residuals + and/or jacobians was successful or not. This can be used to + communicate numerical failures in Jacobian computations for + instance. :class:`SizedCostFunction` ==========================