diff options
Diffstat (limited to 'internal/ceres/gradient_checking_cost_function.cc')
-rw-r--r-- | internal/ceres/gradient_checking_cost_function.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/internal/ceres/gradient_checking_cost_function.cc b/internal/ceres/gradient_checking_cost_function.cc index 3edf95d..bca22e6 100644 --- a/internal/ceres/gradient_checking_cost_function.cc +++ b/internal/ceres/gradient_checking_cost_function.cc @@ -44,7 +44,7 @@ #include "ceres/problem_impl.h" #include "ceres/program.h" #include "ceres/residual_block.h" -#include "ceres/runtime_numeric_diff_cost_function.h" +#include "ceres/dynamic_numeric_diff_cost_function.h" #include "ceres/stringprintf.h" #include "ceres/types.h" #include "glog/logging.h" @@ -84,14 +84,24 @@ class GradientCheckingCostFunction : public CostFunction { double relative_precision, const string& extra_info) : function_(function), - finite_diff_cost_function_( - CreateRuntimeNumericDiffCostFunction(function, - CENTRAL, - relative_step_size)), relative_precision_(relative_precision), extra_info_(extra_info) { - *mutable_parameter_block_sizes() = function->parameter_block_sizes(); + DynamicNumericDiffCostFunction<CostFunction, CENTRAL>* + finite_diff_cost_function = + new DynamicNumericDiffCostFunction<CostFunction, CENTRAL>( + function, + DO_NOT_TAKE_OWNERSHIP, + relative_step_size); + + const vector<int32>& parameter_block_sizes = + function->parameter_block_sizes(); + for (int i = 0; i < parameter_block_sizes.size(); ++i) { + finite_diff_cost_function->AddParameterBlock(parameter_block_sizes[i]); + } + *mutable_parameter_block_sizes() = parameter_block_sizes; set_num_residuals(function->num_residuals()); + finite_diff_cost_function->SetNumResiduals(num_residuals()); + finite_diff_cost_function_.reset(finite_diff_cost_function); } virtual ~GradientCheckingCostFunction() { } @@ -107,7 +117,7 @@ class GradientCheckingCostFunction : public CostFunction { int num_residuals = function_->num_residuals(); // Make space for the jacobians of the two methods. - const vector<int16>& block_sizes = function_->parameter_block_sizes(); + const vector<int32>& block_sizes = function_->parameter_block_sizes(); vector<Matrix> term_jacobians(block_sizes.size()); vector<Matrix> finite_difference_jacobians(block_sizes.size()); vector<double*> term_jacobian_pointers(block_sizes.size()); |