Improve logging for linear solver failures.
Change-Id: Idc7dce702e99637f47d7585399ef8da38f0b8111
diff --git a/internal/ceres/conjugate_gradients_solver.cc b/internal/ceres/conjugate_gradients_solver.cc
index 92e829c..d7aee31 100644
--- a/internal/ceres/conjugate_gradients_solver.cc
+++ b/internal/ceres/conjugate_gradients_solver.cc
@@ -137,7 +137,8 @@
if (IsZeroOrInfinity(beta)) {
summary.termination_type = LINEAR_SOLVER_FAILURE;
summary.message = StringPrintf(
- "Numerical failure. beta = rho_n / rho_{n-1} = %e.", beta);
+ "Numerical failure. beta = rho_n / rho_{n-1} = %e, "
+ "rho_n = %e, rho_{n-1} = %e", beta, rho, last_rho);
break;
}
p = z + beta * p;
@@ -157,7 +158,8 @@
if (IsInfinite(alpha)) {
summary.termination_type = LINEAR_SOLVER_FAILURE;
summary.message =
- StringPrintf("Numerical failure. alpha = rho / pq = %e", alpha);
+ StringPrintf("Numerical failure. alpha = rho / pq = %e, "
+ "rho = %e, pq = %e.", alpha, rho, pq);
break;
}
diff --git a/internal/ceres/levenberg_marquardt_strategy.cc b/internal/ceres/levenberg_marquardt_strategy.cc
index e47ef48..84a66f9 100644
--- a/internal/ceres/levenberg_marquardt_strategy.cc
+++ b/internal/ceres/levenberg_marquardt_strategy.cc
@@ -108,9 +108,12 @@
linear_solver_->Solve(jacobian, residuals, solve_options, step);
if (linear_solver_summary.termination_type == LINEAR_SOLVER_FATAL_ERROR) {
- LOG(WARNING) << "Linear solver fatal error.";
- } else if (linear_solver_summary.termination_type == LINEAR_SOLVER_FAILURE ||
- !IsArrayValid(num_parameters, step)) {
+ LOG(WARNING) << "Linear solver fatal error: "
+ << linear_solver_summary.message;
+ } else if (linear_solver_summary.termination_type == LINEAR_SOLVER_FAILURE) {
+ LOG(WARNING) << "Linear solver failure. Failed to compute a step: "
+ << linear_solver_summary.message;
+ } else if (!IsArrayValid(num_parameters, step)) {
LOG(WARNING) << "Linear solver failure. Failed to compute a finite step.";
linear_solver_summary.termination_type = LINEAR_SOLVER_FAILURE;
} else {