Two changes to TinySolver 1. Change the ordering from NUM_PARAMETERS, NUM_RESIDUALS to NUM_RESIDUALS, NUM_PARAMETERS in docs and in code. 2. TinySolver::solve -> TinySolver::Solve Change-Id: I4dca87b971fd9168f1200b53c362669cffc82c1b
diff --git a/include/ceres/tiny_solver.h b/include/ceres/tiny_solver.h index efe12d5..4d40ee8 100644 --- a/include/ceres/tiny_solver.h +++ b/include/ceres/tiny_solver.h
@@ -69,15 +69,15 @@ // struct TinySolverCostFunctionTraits { // typedef double Scalar; // enum { -// NUM_PARAMETERS = <int> OR Eigen::Dynamic, // NUM_RESIDUALS = <int> OR Eigen::Dynamic, +// NUM_PARAMETERS = <int> OR Eigen::Dynamic, // }; // bool operator()(const double* parameters, // double* residuals, // double* jacobian) const; // -// int NumParameters(); -- Needed if NUM_PARAMETERS == Eigen::Dynamic. // int NumResiduals(); -- Needed if NUM_RESIDUALS == Eigen::Dynamic. +// int NumParameters(); -- Needed if NUM_PARAMETERS == Eigen::Dynamic. // } // // For operator(), the size of the objects is: @@ -92,8 +92,8 @@ // struct MyCostFunctionExample { // typedef double Scalar; // enum { -// NUM_PARAMETERS = 3, // NUM_RESIDUALS = 2, +// NUM_PARAMETERS = 3, // }; // bool operator()(const double* parameters, // double* residuals, @@ -110,20 +110,21 @@ // jacobian[2 * 2 + 0] = 4; // Third column (z). // jacobian[2 * 2 + 1] = y; // } -// return EvaluateResidualsAndJacobians(parameters, residuals, jacobian); +// return true; // } // }; // // The solver supports either statically or dynamically sized cost -// functions. If the number of parameters is dynamic then the Function +// functions. If the number of residuals is dynamic then the Function // must define: // -// int NumParameters() const; -// -// If the number of residuals is dynamic then the Function must define: -// // int NumResiduals() const; // +// If the number of parameters is dynamic then the Function must +// define: +// +// int NumParameters() const; +// template<typename Function, typename LinearSolver = Eigen::PartialPivLU< Eigen::Matrix<typename Function::Scalar, @@ -192,8 +193,8 @@ return RUNNING; } - Results solve(const Function& function, Parameters* x_and_min) { - Initialize<NUM_PARAMETERS, NUM_RESIDUALS>(function); + Results Solve(const Function& function, Parameters* x_and_min) { + Initialize<NUM_RESIDUALS, NUM_PARAMETERS>(function); assert(x_and_min); Parameters& x = *x_and_min; @@ -270,34 +271,34 @@ }; // The number of parameters and residuals are dynamically sized. - template <int N, int M> - typename enable_if<(N == Eigen::Dynamic && M == Eigen::Dynamic), void>::type + template <int R, int P> + typename enable_if<(R == Eigen::Dynamic && P == Eigen::Dynamic), void>::type Initialize(const Function& function) { - Initialize(function.NumParameters(), function.NumResiduals()); + Initialize(function.NumResiduals(), function.NumParameters()); } // The number of parameters is dynamically sized and the number of // residuals is statically sized. - template <int N, int M> - typename enable_if<(N == Eigen::Dynamic && M != Eigen::Dynamic), void>::type + template <int R, int P> + typename enable_if<(R == Eigen::Dynamic && P != Eigen::Dynamic), void>::type Initialize(const Function& function) { - Initialize(function.NumParameters(), M); + Initialize(function.NumResiduals(), P); } // The number of parameters is statically sized and the number of // residuals is dynamically sized. - template <int N, int M> - typename enable_if<(N != Eigen::Dynamic && M == Eigen::Dynamic), void>::type + template <int R, int P> + typename enable_if<(R != Eigen::Dynamic && P == Eigen::Dynamic), void>::type Initialize(const Function& function) { - Initialize(N, function.NumResiduals()); + Initialize(R, function.NumParameters()); } // The number of parameters and residuals are statically sized. - template <int N, int M> - typename enable_if<(N != Eigen::Dynamic && M != Eigen::Dynamic), void>::type + template <int R, int P> + typename enable_if<(R != Eigen::Dynamic && P != Eigen::Dynamic), void>::type Initialize(const Function& /* function */) { } - void Initialize(int num_parameters, int num_residuals) { + void Initialize(int num_residuals, int num_parameters) { error_.resize(num_residuals); f_x_new_.resize(num_residuals); jacobian_.resize(num_residuals, num_parameters); @@ -308,4 +309,4 @@ } // namespace ceres -#endif // CERES_PUBLIC_TINY_SOLVER_H_ \ No newline at end of file +#endif // CERES_PUBLIC_TINY_SOLVER_H_
diff --git a/internal/ceres/tiny_solver_test.cc b/internal/ceres/tiny_solver_test.cc index 86827d5..747e20d 100644 --- a/internal/ceres/tiny_solver_test.cc +++ b/internal/ceres/tiny_solver_test.cc
@@ -70,8 +70,8 @@ typedef double Scalar; enum { // Can also be Eigen::Dynamic. - NUM_PARAMETERS = 3, NUM_RESIDUALS = 2, + NUM_PARAMETERS = 3, }; bool operator()(const double* parameters, double* residuals, @@ -84,8 +84,8 @@ public: typedef double Scalar; enum { - NUM_PARAMETERS = Eigen::Dynamic, NUM_RESIDUALS = 2, + NUM_PARAMETERS = Eigen::Dynamic, }; int NumParameters() const { @@ -103,8 +103,8 @@ public: typedef double Scalar; enum { - NUM_PARAMETERS = 3, NUM_RESIDUALS = Eigen::Dynamic, + NUM_PARAMETERS = 3, }; int NumResiduals() const { @@ -122,18 +122,18 @@ public: typedef double Scalar; enum { - NUM_PARAMETERS = Eigen::Dynamic, NUM_RESIDUALS = Eigen::Dynamic, + NUM_PARAMETERS = Eigen::Dynamic, }; - int NumParameters() const { - return 3; - } - int NumResiduals() const { return 2; } + int NumParameters() const { + return 3; + } + bool operator()(const double* parameters, double* residuals, double* jacobian) const { @@ -149,7 +149,7 @@ EXPECT_GT(residuals.norm(), 1e-10); TinySolver<Function> solver; - solver.solve(f, &x); + solver.Solve(f, &x); f(x.data(), residuals.data(), NULL); EXPECT_NEAR(0.0, residuals.norm(), 1e-10);