Only compute old error when solved successfully
When the LM system has not been solved successfully, an exception may be thrown when computing the old error, so this change makes sure the old error is computed after checking.release/4.3a0
parent
1f43d73b34
commit
1324cfd283
|
@ -152,18 +152,18 @@ bool LevenbergMarquardtOptimizer::tryLambda(const GaussianFactorGraph& linear,
|
|||
systemSolvedSuccessfully = false;
|
||||
}
|
||||
|
||||
// Compute the old linearized error as it is not the same
|
||||
// as the nonlinear error when robust noise models are used.
|
||||
double oldLinearizedError = linear.error(VectorValues::Zero(delta));
|
||||
if (systemSolvedSuccessfully) {
|
||||
if (verbose)
|
||||
cout << "linear delta norm = " << delta.norm() << endl;
|
||||
if (params_.verbosityLM >= LevenbergMarquardtParams::TRYDELTA)
|
||||
delta.print("delta");
|
||||
|
||||
// cost change in the linearized system (old - new)
|
||||
// Compute the old linearized error as it is not the same
|
||||
// as the nonlinear error when robust noise models are used.
|
||||
double oldLinearizedError = linear.error(VectorValues::Zero(delta));
|
||||
double newlinearizedError = linear.error(delta);
|
||||
|
||||
// cost change in the linearized system (old - new)
|
||||
double linearizedCostChange = oldLinearizedError - newlinearizedError;
|
||||
if (verbose)
|
||||
cout << "newlinearizedError = " << newlinearizedError
|
||||
|
|
Loading…
Reference in New Issue