.. _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` API. #. 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.