.. _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.



