.. _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 accurately and efficiently.

**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 preconditioners for general sparse
      and bundle adjustment problems.

#. Portable: Runs on Linux, Windows, Mac OS X and Android.


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.

`Blender <http://www.blender.org>`_ uses Ceres for `motion tracking
<http://mango.blender.org/development/planar-tracking-preview/>`_ and
`bundle adjustment
<http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.67/Motion_Tracker>`_.


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



