mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-30 00:50:37 +08:00
a3fb17c8de2e926e2a9dd103a04ca252d2e5155e
In the Levenberg-Marquardt algorithm, the diagonal of J^T J is used to regularize the problem. This corresponds to an elliptical trust region || D step || <= r, where D = sqrt(diag(J^T J)). This commit adds the same elliptical trust region to the dogleg strategy. The trust region problem becomes min. x^T H x + g^T x s.t. || D x || <= r By substituting y = D x, it becomes min. y^T D^-1 H D^-1 y + g^T D^-1 y s.t. || y || <= r which is the traditional spherical trust region problem. This commit changes the DoglegStrategy so that the Gauss-Newton point, the gradient, and the Cauchy point are scaled correctly (without modifying the Jacobian directly). Then the dogleg step is computed the same way as before, and finally the step is rescaled to obtain x = D^-1 y. Change-Id: Iea25a9113ecba911b746e269bc6e6fe51cb59003
Ceres Solver - A non-linear least squares minimizer ================================================== Please see ceres-solver.pdf in docs/ for a tutorial and reference.
Description
Languages
C++
94.4%
CMake
3.8%
Python
0.8%
C
0.5%
Starlark
0.4%