Fix a few typos in the documentation. Change-Id: I541db56b2b81ae758e233ce850d78c3cbb4b6fa3
diff --git a/docs/source/building.rst b/docs/source/building.rst index 4860b0d..a34c1fc 100644 --- a/docs/source/building.rst +++ b/docs/source/building.rst
@@ -500,7 +500,7 @@ #. ``OPENMP [Default: ON]``: On certain platforms like Android, multi-threading with ``OpenMP`` is not supported. Turn this ``OFF`` - to disable multithreading. + to disable multi-threading. #. ``BUILD_SHARED_LIBS [Default: OFF]``: By default Ceres is built as a static library, turn this ``ON`` to instead build Ceres as a @@ -623,7 +623,7 @@ If Ceres was installed in a non-standard path by specifying -DCMAKE_INSTALL_PREFIX="/some/where/local", then the user should add -the **PATHS** option to the ``FIND_PACKAGE()`` command. e.g., +the **PATHS** option to the ``FIND_PACKAGE()`` command, e.g., .. code-block:: cmake
diff --git a/docs/source/contributing.rst b/docs/source/contributing.rst index b169dbf..fa36d2c 100644 --- a/docs/source/contributing.rst +++ b/docs/source/contributing.rst
@@ -114,7 +114,7 @@ git push origin HEAD:refs/for/master When the push succeeds, the console will display a URL showing the - address of the review. Go to the URL and add atleast one of the + address of the review. Go to the URL and add at least one of the maintainers (Sameer Agarwal, Keir Mierle, or Alex Stewart) as reviewers. 3. Wait for a review.
diff --git a/docs/source/index.rst b/docs/source/index.rst index 26b318a..0349eb9 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst
@@ -35,7 +35,7 @@ * Solve `bundle adjustment`_ and SLAM problems in `Project Tango`_. Outside Google, Ceres is used for solving problems in computer vision, -computer graphics, astronomy and physics. e.g., `Willow Garage`_ uses +computer graphics, astronomy and physics. For example, `Willow Garage`_ uses it to solve SLAM problems and `Blender`_ uses it for for planar tracking and bundle adjustment.
diff --git a/docs/source/modeling.rst b/docs/source/modeling.rst index 4b333c4..b88d62e 100644 --- a/docs/source/modeling.rst +++ b/docs/source/modeling.rst
@@ -758,8 +758,8 @@ .. math:: cost(x) = ||A(x - b)||^2 - where, the matrix A and the vector b are fixed and x is the - variable. In case the user is interested in implementing a cost + where, the matrix :math:`A` and the vector :math:`b` are fixed and :math:`x` + is the variable. In case the user is interested in implementing a cost function of the form .. math:: cost(x) = (x - \mu)^T S^{-1} (x - \mu) @@ -913,7 +913,7 @@ Given a loss function :math:`\rho(s)` and a scalar :math:`a`, :class:`ScaledLoss` implements the function :math:`a \rho(s)`. - Since we treat the a ``NULL`` Loss function as the Identity loss + Since we treat a ``NULL`` Loss function as the Identity loss function, :math:`rho` = ``NULL``: is a valid input and will result in the input being scaled by :math:`a`. This provides a simple way of implementing a scaled ResidualBlock. @@ -930,7 +930,7 @@ This templated class allows the user to implement a loss function whose scale can be mutated after an optimization problem has been - constructed. e.g, + constructed, e.g, .. code-block:: c++ @@ -1141,7 +1141,7 @@ .. math:: x' = \boxplus(x, \Delta x), For example, Quaternions have a three dimensional local - parameterization. It's plus operation can be implemented as (taken + parameterization. Its plus operation can be implemented as (taken from `internal/ceres/autodiff_local_parameterization_test.cc <https://ceres-solver.googlesource.com/ceres-solver/+/master/internal/ceres/autodiff_local_parameterization_test.cc>`_ ) @@ -1178,7 +1178,7 @@ } }; - Then given this struct, the auto differentiated local + Given this struct, the auto differentiated local parameterization can now be constructed as .. code-block:: c++ @@ -1619,7 +1619,7 @@ .. function:: void QuaternionRotatePoint<T>(const T q[4], const T pt[3], T result[3]) - With this function you do not need to assume that q has unit norm. + With this function you do not need to assume that :math:`q` has unit norm. It does assume that the norm is non-zero. .. function:: void QuaternionProduct<T>(const T z[4], const T w[4], T zw[4])
diff --git a/docs/source/solving.rst b/docs/source/solving.rst index 91713e0..c80e88d 100644 --- a/docs/source/solving.rst +++ b/docs/source/solving.rst
@@ -13,7 +13,7 @@ ============ Effective use of Ceres requires some familiarity with the basic -components of a nonlinear least squares solver, so before we describe +components of a non-linear least squares solver, so before we describe how to configure and use the solver, we will take a brief look at how some of the core optimization algorithms in Ceres work. @@ -21,7 +21,7 @@ variables, and :math:`F(x) = \left[f_1(x), ... , f_{m}(x) \right]^{\top}` be a :math:`m`-dimensional function of :math:`x`. We are interested in -solving the following optimization problem [#f1]_ . +solving the optimization problem [#f1]_ .. math:: \arg \min_x \frac{1}{2}\|F(x)\|^2\ . \\ L \le x \le U @@ -120,8 +120,8 @@ :label: trp There are a number of different ways of solving this problem, each -giving rise to a different concrete trust-region algorithm. Currently -Ceres, implements two trust-region algorithms - Levenberg-Marquardt +giving rise to a different concrete trust-region algorithm. Currently, +Ceres implements two trust-region algorithms - Levenberg-Marquardt and Dogleg, each of which is augmented with a line search if bounds constraints are present [Kanzow]_. The user can choose between them by setting :member:`Solver::Options::trust_region_strategy_type`. @@ -247,7 +247,7 @@ the point that minimizes the trust region problem in this subspace [ByrdSchnabel]_. -The key advantage of the Dogleg over Levenberg Marquardt is that if +The key advantage of the Dogleg over Levenberg-Marquardt is that if the step computation for a particular choice of :math:`\mu` does not result in sufficient decrease in the value of the objective function, Levenberg-Marquardt solves the linear approximation from scratch with @@ -265,7 +265,7 @@ Some non-linear least squares problems have additional structure in the way the parameter blocks interact that it is beneficial to modify -the way the trust region step is computed. e.g., consider the +the way the trust region step is computed. For example, consider the following regression problem .. math:: y = a_1 e^{b_1 x} + a_2 e^{b_3 x^2 + c_1} @@ -521,7 +521,7 @@ .. math:: H = \left[ \begin{matrix} B & E\\ E^\top & C \end{matrix} \right]\ , :label: hblock -where, :math:`B \in \mathbb{R}^{pc\times pc}` is a block sparse matrix +where :math:`B \in \mathbb{R}^{pc\times pc}` is a block sparse matrix with :math:`p` blocks of size :math:`c\times c` and :math:`C \in \mathbb{R}^{qs\times qs}` is a block diagonal matrix with :math:`q` blocks of size :math:`s\times s`. :math:`E \in \mathbb{R}^{pc\times qs}` is a @@ -560,7 +560,7 @@ observe at least one common point. -Now, eq-linear2 can be solved by first forming :math:`S`, solving for +Now, :eq:`linear2` can be solved by first forming :math:`S`, solving for :math:`\Delta y`, and then back-substituting :math:`\Delta y` to obtain the value of :math:`\Delta z`. Thus, the solution of what was an :math:`n\times n`, :math:`n=pc+qs` linear system is reduced to the @@ -622,7 +622,7 @@ reduced camera matrix :math:`S` instead of :math:`H`. One reason to do this is that :math:`S` is a much smaller matrix than :math:`H`, but more importantly, it can be shown that :math:`\kappa(S)\leq -\kappa(H)`. Cseres implements PCG on :math:`S` as the +\kappa(H)`. Ceres implements PCG on :math:`S` as the ``ITERATIVE_SCHUR`` solver. When the user chooses ``ITERATIVE_SCHUR`` as the linear solver, Ceres automatically switches from the exact step algorithm to an inexact step algorithm. @@ -709,7 +709,7 @@ For bundle adjustment problems arising in reconstruction from community photo collections, more effective preconditioners can be constructed by analyzing and exploiting the camera-point visibility -structure of the scene [KushalAgarwal]. Ceres implements the two +structure of the scene [KushalAgarwal]_. Ceres implements the two visibility based preconditioners described by Kushal & Agarwal as ``CLUSTER_JACOBI`` and ``CLUSTER_TRIDIAGONAL``. These are fairly new preconditioners and Ceres' implementation of them is in its early @@ -747,14 +747,14 @@ lowest numbered elimination group are eliminated first, and then the parameter blocks in the next lowest numbered elimination group and so on. Within each elimination group, Ceres is free to order the -parameter blocks as it chooses. e.g. Consider the linear system +parameter blocks as it chooses. For example, consider the linear system .. math:: x + y &= 3\\ 2x + 3y &= 7 There are two ways in which it can be solved. First eliminating -:math:`x` from the two equations, solving for y and then back +:math:`x` from the two equations, solving for :math:`y` and then back substituting for :math:`x`, or first eliminating :math:`y`, solving for :math:`x` and back substituting for :math:`y`. The user can construct three orderings here. @@ -1001,7 +1001,7 @@ During the bracketing phase of a Wolfe line search, the step size is increased until either a point satisfying the Wolfe conditions - is found, or an upper bound for a bracket containinqg a point + is found, or an upper bound for a bracket containing a point satisfying the conditions is found. Precisely, at each iteration of the expansion: @@ -1094,7 +1094,7 @@ Default: ``1e6`` The ``LEVENBERG_MARQUARDT`` strategy, uses a diagonal matrix to - regularize the the trust region step. This is the lower bound on + regularize the trust region step. This is the lower bound on the values of this diagonal matrix. .. member:: double Solver::Options::max_lm_diagonal @@ -1102,7 +1102,7 @@ Default: ``1e32`` The ``LEVENBERG_MARQUARDT`` strategy, uses a diagonal matrix to - regularize the the trust region step. This is the upper bound on + regularize the trust region step. This is the upper bound on the values of this diagonal matrix. .. member:: int Solver::Options::max_num_consecutive_invalid_steps @@ -1347,7 +1347,7 @@ on each Newton/Trust region step using a coordinate descent algorithm. For more details, see :ref:`section-inner-iterations`. -.. member:: double Solver::Options::inner_itearation_tolerance +.. member:: double Solver::Options::inner_iteration_tolerance Default: ``1e-3`` @@ -1410,7 +1410,7 @@ #. ``|gradient|`` is the max norm of the gradient. #. ``|step|`` is the change in the parameter vector. #. ``tr_ratio`` is the ratio of the actual change in the objective - function value to the change in the the value of the trust + function value to the change in the value of the trust region model. #. ``tr_radius`` is the size of the trust region radius. #. ``ls_iter`` is the number of linear solver iterations used to @@ -1419,7 +1419,7 @@ ``ITERATIVE_SCHUR`` it is the number of iterations of the Conjugate Gradients algorithm. #. ``iter_time`` is the time take by the current iteration. - #. ``total_time`` is the the total time taken by the minimizer. + #. ``total_time`` is the total time taken by the minimizer. For ``LINE_SEARCH_MINIMIZER`` the progress display looks like @@ -1438,7 +1438,7 @@ #. ``h`` is the change in the parameter vector. #. ``s`` is the optimal step length computed by the line search. #. ``it`` is the time take by the current iteration. - #. ``tt`` is the the total time taken by the minimizer. + #. ``tt`` is the total time taken by the minimizer. .. member:: vector<int> Solver::Options::trust_region_minimizer_iterations_to_dump @@ -1530,7 +1530,7 @@ Callbacks that are executed at the end of each iteration of the :class:`Minimizer`. They are executed in the order that they are specified in this vector. By default, parameter blocks are updated - only at the end of the optimization, i.e when the + only at the end of the optimization, i.e., when the :class:`Minimizer` terminates. This behavior is controlled by :member:`Solver::Options::update_state_every_variable`. If the user wishes to have access to the update parameter blocks when his/her @@ -1840,7 +1840,7 @@ ``values[rows[i]]`` ... ``values[rows[i + 1] - 1]`` are the values of the non-zero columns of row ``i``. -e.g, consider the 3x4 sparse matrix +e.g., consider the 3x4 sparse matrix .. code-block:: c++ @@ -2078,7 +2078,7 @@ `True` if the user asked for inner iterations to be used as part of the optimization and the problem structure was such that they were - actually performed. e.g., in a problem with just one parameter + actually performed. For example, in a problem with just one parameter block, inner iterations are not performed. .. member:: vector<int> inner_iteration_ordering_given
diff --git a/docs/source/tutorial.rst b/docs/source/tutorial.rst index 79714f6..2d8da68 100644 --- a/docs/source/tutorial.rst +++ b/docs/source/tutorial.rst
@@ -527,7 +527,7 @@ Starting from parameter values :math:`m = 0, c=0` with an initial objective function value of :math:`121.173` Ceres finds a solution :math:`m= 0.291861, c = 0.131439` with an objective function value of -:math:`1.05675`. These values are a a bit different than the +:math:`1.05675`. These values are a bit different than the parameters of the original model :math:`m=0.3, c= 0.1`, but this is expected. When reconstructing a curve from noisy data, we expect to see such deviations. Indeed, if you were to evaluate the objective @@ -562,9 +562,9 @@ :align: center To deal with outliers, a standard technique is to use a -:class:`LossFunction`. Loss functions, reduce the influence of +:class:`LossFunction`. Loss functions reduce the influence of residual blocks with high residuals, usually the ones corresponding to -outliers. To associate a loss function in a residual block, we change +outliers. To associate a loss function with a residual block, we change .. code-block:: c++