| .. _chapter-introduction: | |
| ============ | |
| Introduction | |
| ============ | |
| Solving nonlinear least squares problems [#f1]_ comes up in a broad | |
| range of areas across science and engineering - from fitting curves in | |
| statistics, to constructing 3D models from photographs in computer | |
| vision. Ceres Solver [#f2]_ [#f3]_ is a portable C++ library for | |
| solving non-linear least squares problems. It is designed to solve | |
| small and large sparse problems accurately and efficiently. | |
| At Google, Ceres Solver has been used for solving a variety of | |
| problems in computer vision and machine learning. e.g., it is used to | |
| to estimate the pose of Street View cars, aircrafts, and satellites; | |
| to build 3D models for PhotoTours; to estimate satellite image sensor | |
| characteristics, and more. | |
| Features: | |
| #. A friendly :ref:`chapter-modeling`. | |
| #. Automatic and numeric differentiation. | |
| #. Robust loss functions and local parameterizations. | |
| #. Multithreading. | |
| #. Trust-Region (Levenberg-Marquardt and Dogleg) and Line Search | |
| (Nonlinear CG and L-BFGS) solvers. | |
| #. Variety of linear solvers. | |
| a. Dense QR and Cholesky factorization (using `Eigen | |
| <http://eigen.tuxfamily.org/index.php?title=Main_Page>`_) for | |
| small problems. | |
| b. Sparse Cholesky factorization (using `SuiteSparse | |
| <http://www.cise.ufl.edu/research/sparse/SuiteSparse/>`_ and | |
| `CXSparse <http://www.cise.ufl.edu/research/sparse/CSparse/>`_) for | |
| large sparse problems. | |
| c. Specialized solvers for bundle adjustment problems in computer | |
| vision. | |
| d. Iterative linear solvers with perconditioners for general sparse | |
| and bundle adjustment problems. | |
| #. Portable: Runs on Linux, Windows, Mac OS X and Android. An iOS port is | |
| underway. | |
| .. rubric:: Footnotes | |
| .. [#f1] For a gentle but brief introduction to non-linear least | |
| squares problems, please start by reading the | |
| :ref:`chapter-tutorial`. | |
| .. [#f2] While there is some debate as to who invented the method of | |
| Least Squares [Stigler]_, there is no debate that it was | |
| `Carl Friedrich Gauss | |
| <http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss>`_ who | |
| brought it to the attention of the world. Using just 22 | |
| observations of the newly discovered asteroid `Ceres | |
| <http://en.wikipedia.org/wiki/Ceres_(dwarf_planet)>`_, Gauss | |
| used the method of least squares to correctly predict when | |
| and where the asteroid will emerge from behind the Sun | |
| [TenenbaumDirector]_. We named our solver after Ceres to | |
| celebrate this seminal event in the history of astronomy, | |
| statistics and optimization. | |
| .. [#f3] For brevity, in the rest of this document we will just use | |
| the term Ceres. | |