mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-31 01:20:38 +08:00
a3fb17c8de
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