Releases

1.9.0

New Features

  1. Bounds constraints: Support for upper and/or lower bounds on parameters when using the trust region minimizer.
  2. Dynamic Sparsity: Problems in which the sparsity structure of the Jacobian changes over the course of the optimization can now be solved much more efficiently. (Richard Stebbing)
  3. Improved support for Microsoft Visual C++ including the ability to build and ship DLLs. (Björn Piltz, Alex Stewart and Sergey Sharybin)
  4. Support for building on iOS 6.0 or higher (Jack Feng).
  5. Autogeneration of config.h that captures all the defines used to build and use Ceres Solver.
  6. Simpler and more informative solver termination type reporting. (See below for more details)
  7. New website based entirely on Sphinx.
  8. AutoDiffLocalParameterization allows the use of automatic differentiation for defining LocalParameterization objects (Alex Stewart)
  9. LBFGS is faster due to fewer memory copies.
  10. Parameter blocks are not restricted to be less than 32k in size, they can be up to 2G in size.
  11. Faster SPARSE_NORMAL_CHOLESKY solver when using CX_SPARSE as the sparse linear algebra library.
  12. Added Problem::IsParameterBlockPresent and Problem::GetParameterization.
  13. Added the (2,4,9) and (2,4,8) template specializations.
  14. An example demonstrating the use of DynamicAutoDiffCostFunction. (Joydeep Biswas)
  15. Homography estimation example from Blender demonstrating the use of a custom IterationCallback. (Sergey Sharybin)
  16. Support user passing a custom CMAKE_MODULE_PATH (for BLAS / LAPACK).

Backward Incompatible API Changes

  1. Solver::Options::linear_solver_ordering used to be a naked pointer that Ceres took ownership of. This is error prone behaviour which leads to problems when copying the Solver::Options struct around. This has been replaced with a shared_ptr to handle ownership correctly across copies.

  2. The enum used for reporting the termination/convergence status of the solver has been renamed from SolverTerminationType to TerminationType.

    The enum values have also changed. FUNCTION_TOLERANCE, GRADIENT_TOLERANCE and PARAMETER_TOLERANCE have all been replaced by CONVERGENCE.

    NUMERICAL_FAILURE has been replaed by FAILURE.

    USER_ABORT has been renamed to USER_FAILURE.

    Further Solver::Summary::error has been renamed to Solver::Summary::message. It contains a more detailed explanation for why the solver terminated.

  3. Solver::Options::gradient_tolerance used to be a relative gradient tolerance. i.e., The solver converged when

    \[\begin{split}\|g(x)\|_\infty < \text{gradient_tolerance} * \|g(x_0)\|_\infty\end{split}\]

    where \(g(x)\) is the gradient of the objective function at \(x\) and \(x_0\) is the parmeter vector at the start of the optimization.

    This has changed to an absolute tolerance, i.e. the solver converges when

    \[\begin{split}\|g(x)\|_\infty < \text{gradient_tolerance}\end{split}\]
  4. Ceres cannot be built without the line search minimizer anymore. Thus the preprocessor define CERES_NO_LINE_SEARCH_MINIMIZER has been removed.

Bug Fixes

  1. Disabled warning C4251. (Björn Piltz)
  2. Do not propagate 3d party libs through IMPORTED_LINK_INTERFACE_LIBRARIES_[DEBUG/RELEASE] mechanism when building shared libraries. (Björn Piltz)
  3. Fixed errant verbose levels (Björn Piltz)
  4. Variety of code cleanups, optimizations and bug fixes to the line search minimizer code (Alex Stewart)
  5. Fixed BlockSparseMatrix::Transpose when the matrix has row and column blocks. (Richard Bowen)
  6. Better error checking when Problem::RemoveResidualBlock is called. (Alex Stewart)
  7. Fixed a memory leak in SchurComplementSolver.
  8. Added epsilon() method to NumTraits<ceres::Jet<T, N> >. (Filippo Basso)
  9. Fixed a bug in CompressedRowSparseMatrix::AppendRows` and DeleteRows.q
  10. Handle empty problems consistently.
  11. Restore the state of the Problem after a call to Problem::Evaluate. (Stefan Leutenegger)
  12. Better error checking and reporting for linear solvers.
  13. Use explicit formula to solve quadratic polynomials instead of the eigenvalue solver.
  14. Fix constant parameter handling in inner iterations (Mikael Persson).
  15. SuiteSparse errors do not cause a fatal crash anymore.
  16. Fix corrector_test.cc.
  17. Relax the requirements on loss function derivatives.
  18. Minor bugfix to logging.h (Scott Ettinger)
  19. Updated gmock and gtest to the latest upstream version.
  20. Fix build breakage on old versions of SuiteSparse.
  21. Fixed build issues related to Clang / LLVM 3.4 (Johannes Schönberger)
  22. METIS_FOUND is never set. Changed the commit to fit the setting of the other #._FOUND definitions. (Andreas Franek)
  23. Variety of bug fixes and cleanups to the CMake build system (Alex Stewart)
  24. Removed fictious shared library target from the NDK build.
  25. Solver::Options now uses shared_ptr to handle ownership of Solver::Options::linear_solver_ordering and Solver::Options::inner_iteration_ordering. As a consequence the NDK build now depends on libc++ from the LLVM project.
  26. Variety of lint cleanups (William Rucklidge & Jim Roseborough)
  27. Various internal cleanups including dead code removal.

1.8.0

New Features

  1. Significant improved CMake files with better robustness, dependency checking and GUI support. (Alex Stewart)
  2. Added DynamicNumericDiffCostFunction for numerically differentiated cost functions whose sizing is determined at run time.
  3. NumericDiffCostFunction now supports a dynamic number of residuals just like AutoDiffCostFunction.
  4. Problem exposes more of its structure in its API.
  5. Faster automatic differentiation (Tim Langlois)
  6. Added the commonly occuring 2_d_d template specialization for the Schur Eliminator.
  7. Faster ITERATIVE_SCHUR solver using template specializations.
  8. Faster SCHUR_JACOBI preconditioner construction.
  9. Faster AngleAxisRotatePoint.
  10. Faster Jacobian evaluation when a loss function is used.
  11. Added support for multiple clustering algorithms in visibility based preconditioning, including a new fast single linkage clustering algorithm.

Bug Fixes

  1. Fix ordering of ParseCommandLineFlags() & InitGoogleTest() for Windows. (Alex Stewart)
  2. Remove DCHECK_GE checks from fixed_array.h.
  3. Fix build on MSVC 2013 (Petter Strandmark)
  4. Fixed AngleAxisToRotationMatrix near zero.
  5. Move CERES_HASH_NAMESPACE macros to collections_port.h.
  6. Fix handling of unordered_map/unordered_set on OSX 10.9.0.
  7. Explicitly link to libm for curve_fitting_c.c. (Alex Stewart)
  8. Minor type conversion fix to autodiff.h
  9. Remove RuntimeNumericDiffCostFunction.
  10. Fix operator= ambiguity on some versions of Clang. (Alex Stewart)
  11. Various Lint cleanups (William Rucklidge & Jim Roseborough)
  12. Modified installation folders for Windows. (Pablo Speciale)
  13. Added librt to link libraries for SuiteSparse_config on Linux. (Alex Stewart)
  14. Check for presence of return-type-c-linkage option with Clang. (Alex Stewart)
  15. Fix Problem::RemoveParameterBlock after calling solve. (Simon Lynen)
  16. Fix a free/delete bug in covariance_impl.cc
  17. Fix two build errors. (Dustin Lang)
  18. Add RequireInitialization = 1 to NumTraits::Jet.
  19. Update gmock/gtest to 1.7.0
  20. Added IterationSummary::gradient_norm.
  21. Reduced verbosity of the inner iteration minimizer.
  22. Fixed a bug in TrustRegionMinimizer. (Michael Vitus)
  23. Removed android/build_android.sh.

1.7.0

Backward Incompatible API Changes

  1. Solver::Options::sparse_linear_algebra_library has been renamed to Solver::Options::sparse_linear_algebra_library_type.

New Features

  1. Sparse and dense covariance estimation.
  2. A new Wolfe line search. (Alex Stewart)
  3. BFGS line search direction. (Alex Stewart)
  4. C API
  5. Speeded up the use of loss functions > 17x.
  6. Faster DENSE_QR, DENSE_NORMAL_CHOLESKY and DENSE_SCHUR solvers.
  7. Support for multiple dense linear algebra backends. In particular optimized BLAS and LAPACK implementations (e.g., Intel MKL, ACML, OpenBLAS etc) can now be used to do the dense linear algebra for DENSE_QR, DENSE_NORMAL_CHOLESKY and DENSE_SCHUR
  8. Use of Inner iterations can now be adaptively stopped. Iteration and runtime statistics for inner iterations are not reported in Solver::Summary and Solver::Summary::FullReport.
  9. Improved inner iteration step acceptance criterion.
  10. Add BlockRandomAccessCRSMatrix.
  11. Speeded up automatic differentiation by 7%.
  12. Bundle adjustment example from libmv/Blender (Sergey Sharybin)
  13. Shared library building is now controlled by CMake, rather than a custom solution. Previously, Ceres had a custom option, but this is now deprecated in favor of CMake’s built in support for switching between static and shared. Turn on BUILD_SHARED_LIBS to get shared Ceres libraries.
  14. No more dependence on Protocol Buffers.
  15. Incomplete LQ factorization.
  16. Ability to write trust region problems to disk.
  17. Add sinh, cosh, tanh and tan functions to automatic differentiation (Johannes Schönberger)
  18. Simplifications to the cmake build file.
  19. miniglog can now be used as a replacement for google-glog on non Android platforms. (This is NOT recommended).

Bug Fixes

  1. Fix ITERATIVE_SCHUR solver to work correctly when the schur complement is of size zero. (Soohyun Bae)
  2. Fix the spec file for generating RPM packages (Brian Pitts and Taylor Braun-Jones).
  3. Fix how ceres calls CAMD (Manas Jagadev)
  4. Fix breakage on old versions of SuiteSparse. (Fisher Yu)
  5. Fix warning C4373 in Visual Studio (Petter Strandmark)
  6. Fix compilation error caused by missing suitesparse headers and reorganize them to be more robust. (Sergey Sharybin)
  7. Check GCC Version before adding -fast compiler option on OSX. (Steven Lovegrove)
  8. Add documentation for minimizer progress output.
  9. Lint and other cleanups (William Rucklidge and James Roseborough)
  10. Collections port fix for MSC 2008 (Sergey Sharybin)
  11. Various corrections and cleanups in the documentation.
  12. Change the path where CeresConfig.cmake is installed (Pablo Speciale)
  13. Minor errors in documentation (Pablo Speciale)
  14. Updated depend.cmake to follow CMake IF convention. (Joydeep Biswas)
  15. Stablize the schur ordering algorithm.
  16. Update license header in split.h.
  17. Enabling -O4 (link-time optimization) only if compiler/linker support it. (Alex Stewart)
  18. Consistent glog path across files.
  19. ceres-solver.spec: Use cleaner, more conventional Release string (Taylor Braun-Jones)
  20. Fix compile bug on RHEL6 due to missing header (Taylor Braun-Jones)
  21. CMake file is less verbose.
  22. Use the latest upstream version of google-test and gmock.
  23. Rationalize some of the variable names in Solver::Options.
  24. Improve Summary::FullReport when line search is used.
  25. Expose line search parameters in Solver::Options.
  26. Fix update of L-BFGS history buffers after they become full. (Alex Stewart)
  27. Fix configuration error on systems without SuiteSparse installed (Sergey Sharybin)
  28. Enforce the read call returns correct value in curve_fitting_c.c (Arnaud Gelas)
  29. Fix DynamicAutoDiffCostFunction (Richard Stebbing)
  30. Fix Problem::RemoveParameterBlock documentation (Johannes Schönberger)
  31. Fix a logging bug in parameter_block.h
  32. Refactor the preconditioner class structure.
  33. Fix an uninitialized variable warning when building with GCC.
  34. Fix a reallocation bug in CreateJacobianBlockSparsityTranspose. (Yuliy Schwartzburg)
  35. Add a define for O_BINARY.
  36. Fix miniglog-based Android NDK build; now works with NDK r9. (Scott Ettinger)

1.6.0

New Features

  1. Major Performance improvements.
    1. Schur type solvers (SPARSE_SCHUR, DENSE_SCHUR, ITERATIVE_SCHUR) are significantly faster due to custom BLAS routines and fewer heap allocations.
    2. SPARSE_SCHUR when used with CX_SPARSE now uses a block AMD for much improved factorization performance.
    3. The jacobian matrix is pre-ordered so that SPARSE_NORMAL_CHOLESKY and SPARSE_SCHUR do not have to make copies inside CHOLMOD.
    4. Faster autodiff by replacing division by multplication by inverse.
    5. When compiled without threads, the schur eliminator does not pay the penalty for locking and unlocking mutexes.
  2. Users can now use linear_solver_ordering to affect the fill-reducing ordering used by SUITE_SPARSE for SPARSE_NORMAL_CHOLESKY.
  3. Problem can now report the set of parameter blocks it knows about.
  4. TrustRegionMinimizer uses the evaluator to compute the gradient instead of a matrix vector multiply.
  5. On Mac OS, whole program optimization is enabled.
  6. Users can now use automatic differentiation to define new LocalParameterization objects. (Sergey Sharybin)
  7. Enable larger tuple sizes for Visual Studio 2012. (Petter Strandmark)

Bug Fixes

  1. Update the documentation for CostFunction.
  2. Fixed a typo in the documentation. (Pablo Speciale)
  3. Fix a typo in suitesparse.cc.
  4. Bugfix in NumericDiffCostFunction. (Nicolas Brodu)
  5. Death to BlockSparseMatrixBase.
  6. Change Minimizer::Options::min_trust_region_radius to double.
  7. Update to compile with stricter gcc checks. (Joydeep Biswas)
  8. Do not modify cached CMAKE_CXX_FLAGS_RELEASE. (Sergey Sharybin)
  9. <iterator> needed for back_insert_iterator. (Petter Strandmark)
  10. Lint cleanup. (William Rucklidge)
  11. Documentation corrections. (Pablo Speciale)

1.5.0

Backward Incompatible API Changes

  1. Added Problem::Evaluate. Now you can evaluate a problem or any part of it without calling the solver.

    In light of this the following settings have been deprecated and removed from the API.

    • Solver::Options::return_initial_residuals
    • Solver::Options::return_initial_gradient
    • Solver::Options::return_initial_jacobian
    • Solver::Options::return_final_residuals
    • Solver::Options::return_final_gradient
    • Solver::Options::return_final_jacobian

    Instead we recommend using something like this.

    Problem problem;
    // Build problem
    
    vector<double> initial_residuals;
    problem.Evaluate(Problem::EvaluateOptions(),
                     NULL, /* No cost */
                     &initial_residuals,
                     NULL, /* No gradient */
                     NULL  /* No jacobian */ );
    
    Solver::Options options;
    Solver::Summary summary;
    Solver::Solve(options, &problem, &summary);
    
    vector<double> final_residuals;
    problem.Evaluate(Problem::EvaluateOptions(),
                     NULL, /* No cost */
                     &final_residuals,
                     NULL, /* No gradient */
                     NULL  /* No jacobian */ );
    

New Features

  1. Problem now supports removal of ParameterBlocks and ResidualBlocks. There is a space/time tradeoff in doing this which is controlled by Problem::Options::enable_fast_parameter_block_removal.
  2. Ceres now supports Line search based optimization algorithms in addition to trust region algorithms. Currently there is support for gradient descent, non-linear conjugate gradient and LBFGS search directions.
  3. Added Problem::Evaluate. Now you can evaluate a problem or any part of it without calling the solver. In light of this the following settings have been deprecated and removed from the API.
    • Solver::Options::return_initial_residuals
    • Solver::Options::return_initial_gradient
    • Solver::Options::return_initial_jacobian
    • Solver::Options::return_final_residuals
    • Solver::Options::return_final_gradient
    • Solver::Options::return_final_jacobian
  4. New, much improved HTML documentation using Sphinx.
  5. Changed NumericDiffCostFunction to take functors like AutoDiffCostFunction.
  6. Added support for mixing automatic, analytic and numeric differentiation. This is done by adding CostFunctionToFunctor and NumericDiffFunctor objects to the API.
  7. Sped up the robust loss function correction logic when residual is one dimensional.
  8. Sped up DenseQRSolver by changing the way dense jacobians are stored. This is a 200-500% improvement in linear solver performance depending on the size of the problem.
  9. DENSE_SCHUR now supports multi-threading.
  10. Greatly expanded Summary::FullReport:
    • Report the ordering used by the LinearSolver.
    • Report the ordering used by the inner iterations.
    • Execution timing breakdown into evaluations and linear solves.
    • Effective size of the problem solved by the solver, which now accounts for the size of the tangent space when using a LocalParameterization.
  11. Ceres when run at the VLOG level 3 or higher will report detailed timing information about its internals.
  12. Remove extraneous initial and final residual evaluations. This speeds up the solver a bit.
  13. Automatic differenatiation with a dynamic number of parameter blocks. (Based on an idea by Thad Hughes).
  14. Sped up problem construction and destruction.
  15. Added matrix adapters to rotation.h so that the rotation matrix routines can work with row and column major matrices. (Markus Moll)
  16. SCHUR_JACOBI can now be used without SuiteSparse.
  17. A .spec file for producing RPMs. (Taylor Braun-Jones)
  18. CMake can now build the sphinx documentation (Pablo Speciale)
  19. Add support for creating a CMake config file during build to make embedding Ceres in other CMake-using projects easier. (Pablo Speciale).
  20. Better error reporting in Problem for missing parameter blocks.
  21. A more flexible Android.mk and a more modular build. If binary size and/or compile time is a concern, larger parts of the solver can be disabled at compile time.

Bug Fixes

  1. Compilation fixes for MSVC2010 (Sergey Sharybin)
  2. Fixed “deprecated conversion from string constant to char*” warnings. (Pablo Speciale)
  3. Correctly propagate ifdefs when building without Schur eliminator template specializations.
  4. Correct handling of LIB_SUFFIX on Linux. (Yuliy Schwartzburg).
  5. Code and signature cleanup in rotation.h.
  6. Make examples independent of internal code.
  7. Disable unused member in gtest which results in build error on OS X with latest Xcode. (Taylor Braun-Jones)
  8. Pass the correct flags to the linker when using pthreads. (Taylor Braun-Jones)
  9. Only use cmake28 macro when building on RHEL6. (Taylor Braun-Jones)
  10. Remove -Wno-return-type-c-linkage when compiling with GCC. (Taylor Braun-Jones)
  11. Fix No previous prototype warnings. (Sergey Sharybin)
  12. MinGW build fixes. (Sergey Sharybin)
  13. Lots of minor code and lint fixes. (William Rucklidge)
  14. Fixed a bug in solver_impl.cc residual evaluation. (Markus Moll)
  15. Fixed varidic evaluation bug in AutoDiff.
  16. Fixed SolverImpl tests.
  17. Fixed a bug in DenseSparseMatrix::ToDenseMatrix().
  18. Fixed an initialization bug in ProgramEvaluator.
  19. Fixes to Android.mk paths (Carlos Hernandez)
  20. Modify nist.cc to compute accuracy based on ground truth solution rather than the ground truth function value.
  21. Fixed a memory leak in cxsparse.cc. (Alexander Mordvintsev).
  22. Fixed the install directory for libraries by correctly handling LIB_SUFFIX. (Taylor Braun-Jones)

1.4.0

Backward Incompatible API Changes

The new ordering API breaks existing code. Here the common case fixes.

Before

options.linear_solver_type = ceres::DENSE_SCHUR
options.ordering_type = ceres::SCHUR

After

options.linear_solver_type = ceres::DENSE_SCHUR

Before

options.linear_solver_type = ceres::DENSE_SCHUR;
options.ordering_type = ceres::USER;
for (int i = 0; i < num_points; ++i) {
  options.ordering.push_back(my_points[i])
}
for (int i = 0; i < num_cameras; ++i) {
  options.ordering.push_back(my_cameras[i])
}
options.num_eliminate_blocks = num_points;

After

options.linear_solver_type = ceres::DENSE_SCHUR;
options.ordering = new ceres::ParameterBlockOrdering;
for (int i = 0; i < num_points; ++i) {
  options.linear_solver_ordering->AddElementToGroup(my_points[i], 0);
}
for (int i = 0; i < num_cameras; ++i) {
  options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1);
}

New Features

  1. A new richer, more expressive and consistent API for ordering parameter blocks.
  2. A non-linear generalization of Ruhe & Wedin’s Algorithm II. This allows the user to use variable projection on separable and non-separable non-linear least squares problems. With multithreading, this results in significant improvements to the convergence behavior of the solver at a small increase in run time.
  3. An image denoising example using fields of experts. (Petter Strandmark)
  4. Defines for Ceres version and ABI version.
  5. Higher precision timer code where available. (Petter Strandmark)
  6. Example Makefile for users of Ceres.
  7. IterationSummary now informs the user when the step is a non-monotonic step.
  8. Fewer memory allocations when using DenseQRSolver.
  9. GradientChecker for testing CostFunctions (William Rucklidge)
  10. Add support for cost functions with 10 parameter blocks in Problem. (Fisher)
  11. Add support for 10 parameter blocks in AutoDiffCostFunction.

Bug Fixes

  1. static cast to force Eigen::Index to long conversion
  2. Change LOG(ERROR) to LOG(WARNING) in schur_complement_solver.cc.
  3. Remove verbose logging from DenseQRSolve.
  4. Fix the Android NDK build.
  5. Better handling of empty and constant Problems.
  6. Remove an internal header that was leaking into the public API.
  7. Memory leak in trust_region_minimizer.cc
  8. Schur ordering was operating on the wrong object (Ricardo Martin)
  9. MSVC fixes (Petter Strandmark)
  10. Various fixes to nist.cc (Markus Moll)
  11. Fixed a jacobian scaling bug.
  12. Numerically robust computation of model_cost_change.
  13. Signed comparison compiler warning fixes (Ricardo Martin)
  14. Various compiler warning fixes all over.
  15. Inclusion guard fixes (Petter Strandmark)
  16. Segfault in test code (Sergey Popov)
  17. Replaced EXPECT/ASSERT_DEATH with the more portable EXPECT_DEATH_IF_SUPPORTED macros.
  18. Fixed the camera projection model in Ceres’ implementation of Snavely’s camera model. (Ricardo Martin)

1.3.0

New Features

  1. Android Port (Scott Ettinger also contributed to the port)
  2. Windows port. (Changchang Wu and Pierre Moulon also contributed to the port)
  3. New subspace Dogleg Solver. (Markus Moll)
  4. Trust region algorithm now supports the option of non-monotonic steps.
  5. New loss functions ArcTanLossFunction, TolerantLossFunction and ComposedLossFunction. (James Roseborough).
  6. New DENSE_NORMAL_CHOLESKY linear solver, which uses Eigen’s LDLT factorization on the normal equations.
  7. Cached symbolic factorization when using CXSparse. (Petter Strandark)
  8. New example nist.cc and data from the NIST non-linear regression test suite. (Thanks to Douglas Bates for suggesting this.)
  9. The traditional Dogleg solver now uses an elliptical trust region (Markus Moll)
  10. Support for returning initial and final gradients & Jacobians.
  11. Gradient computation support in the evaluators, with an eye towards developing first order/gradient based solvers.
  12. A better way to compute Solver::Summary::fixed_cost. (Markus Moll)
  13. CMake support for building documentation, separate examples, installing and uninstalling the library and Gerrit hooks (Arnaud Gelas)
  14. SuiteSparse4 support (Markus Moll)
  15. Support for building Ceres without TR1 (This leads to slightly slower DENSE_SCHUR and SPARSE_SCHUR solvers).
  16. BALProblem can now write a problem back to disk.
  17. bundle_adjuster now allows the user to normalize and perturb the problem before solving.
  18. Solver progress logging to file.
  19. Added Program::ToString and ParameterBlock::ToString to help with debugging.
  20. Ability to build Ceres as a shared library (MacOS and Linux only), associated versioning and build release script changes.
  21. Portable floating point classification API.

Bug Fixes

  1. Fix how invalid step evaluations are handled.
  2. Change the slop handling around zero for model cost changes to use relative tolerances rather than absolute tolerances.
  3. Fix an inadvertant integer to bool conversion. (Petter Strandmark)
  4. Do not link to libgomp when building on windows. (Petter Strandmark)
  5. Include gflags.h in test_utils.cc. (Petter Strandmark)
  6. Use standard random number generation routines. (Petter Strandmark)
  7. TrustRegionMinimizer does not implicitly negate the steps that it takes. (Markus Moll)
  8. Diagonal scaling allows for equal upper and lower bounds. (Markus Moll)
  9. TrustRegionStrategy does not misuse LinearSolver:Summary anymore.
  10. Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke)
  11. QuaternionToAngleAxis now guarantees an angle in $[-pi, pi]$. (Guoxuan Zhang)
  12. Added a workaround for a compiler bug in the Android NDK to the Schur eliminator.
  13. The sparse linear algebra library is only logged in Summary::FullReport if it is used.
  14. Rename the macro CERES_DONT_HAVE_PROTOCOL_BUFFERS to CERES_NO_PROTOCOL_BUFFERS for consistency.
  15. Fix how static structure detection for the Schur eliminator logs its results.
  16. Correct example code in the documentation. (Petter Strandmark)
  17. Fix fpclassify.h to work with the Android NDK and STLport.
  18. Fix a memory leak in the levenber_marquardt_strategy_test.cc
  19. Fix an early return bug in the Dogleg solver. (Markus Moll)
  20. Zero initialize Jets.
  21. Moved internal/ceres/mock_log.h to internal/ceres/gmock/mock-log.h
  22. Unified file path handling in tests.
  23. data_fitting.cc includes gflags
  24. Renamed Ceres’ Mutex class and associated macros to avoid namespace conflicts.
  25. Close the BAL problem file after reading it (Markus Moll)
  26. Fix IsInfinite on Jets.
  27. Drop alignment requirements for Jets.
  28. Fixed Jet to integer comparison. (Keith Leung)
  29. Fix use of uninitialized arrays. (Sebastian Koch & Markus Moll)
  30. Conditionally compile gflag dependencies.(Casey Goodlett)
  31. Add data_fitting.cc to the examples CMake file.

1.2.3

Bug Fixes

  1. suitesparse_test is enabled even when -DSUITESPARSE=OFF.
  2. FixedArray internal struct did not respect Eigen alignment requirements (Koichi Akabe & Stephan Kassemeyer).
  3. Fixed quadratic.cc documentation and code mismatch (Nick Lewycky).

1.2.2

Bug Fixes

  1. Fix constant parameter blocks, and other minor fixes (Markus Moll)
  2. Fix alignment issues when combining Jet and FixedArray in automatic differeniation.
  3. Remove obsolete build_defs file.

1.2.1

New Features

  1. Powell’s Dogleg solver
  2. Documentation now has a brief overview of Trust Region methods and how the Levenberg-Marquardt and Dogleg methods work.

Bug Fixes

  1. Destructor for TrustRegionStrategy was not virtual (Markus Moll)
  2. Invalid DCHECK in suitesparse.cc (Markus Moll)
  3. Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti)
  4. Logging level changes in ConjugateGradientsSolver
  5. VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code.
  6. Enable SSE support on MacOS
  7. system_test was taking too long and too much memory (Koichi Akabe)

1.2.0

New Features

  1. CXSparse support.
  2. Block oriented fill reducing orderings. This reduces the factorization time for sparse CHOLMOD significantly.
  3. New Trust region loop with support for multiple trust region step strategies. Currently only Levenberg-Marquardt is supported, but this refactoring opens the door for Dog-leg, Stiehaug and others.
  4. CMake file restructuring. Builds in Release mode by default, and now has platform specific tuning flags.
  5. Re-organized documentation. No new content, but better organization.

Bug Fixes

  1. Fixed integer overflow bug in block_random_access_sparse_matrix.cc.
  2. Renamed some macros to prevent name conflicts.
  3. Fixed incorrent input to StateUpdatingCallback.
  4. Fixes to AutoDiff tests.
  5. Various internal cleanups.

1.1.1

Bug Fixes

  1. Fix a bug in the handling of constant blocks. (Louis Simard)
  2. Add an optional lower bound to the Levenberg-Marquardt regularizer to prevent oscillating between well and ill posed linear problems.
  3. Some internal refactoring and test fixes.

1.1.0

New Features

  1. New iterative linear solver for general sparse problems - CGNR and a block Jacobi preconditioner for it.
  2. Changed the semantics of how SuiteSparse dependencies are checked and used. Now SuiteSparse is built by default, only if all of its dependencies are present.
  3. Automatic differentiation now supports dynamic number of residuals.
  4. Support for writing the linear least squares problems to disk in text format so that they can loaded into MATLAB.
  5. Linear solver results are now checked for nan and infinities.
  6. Added .gitignore file.
  7. A better more robust build system.

Bug Fixes

  1. Fixed a strict weak ordering bug in the schur ordering.
  2. Grammar and typos in the documents and code comments.
  3. Fixed tests which depended on exact equality between floating point values.

1.0.0

Initial Release. Nathan Wiegand contributed to the Mac OSX port.