1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include "ceres/ceres.h"
- #include "glog/logging.h"
- struct Rosenbrock {
- bool operator()(const double* parameters, double* cost) const {
- const double x = parameters[0];
- const double y = parameters[1];
- cost[0] = (1.0 - x) * (1.0 - x) + 100.0 * (y - x * x) * (y - x * x);
- return true;
- }
- static ceres::FirstOrderFunction* Create() {
- constexpr int kNumParameters = 2;
- return new ceres::NumericDiffFirstOrderFunction<Rosenbrock,
- ceres::CENTRAL,
- kNumParameters>(
- new Rosenbrock);
- }
- };
- int main(int argc, char** argv) {
- google::InitGoogleLogging(argv[0]);
- double parameters[2] = {-1.2, 1.0};
- ceres::GradientProblemSolver::Options options;
- options.minimizer_progress_to_stdout = true;
- ceres::GradientProblemSolver::Summary summary;
- ceres::GradientProblem problem(Rosenbrock::Create());
- ceres::Solve(options, problem, parameters, &summary);
- std::cout << summary.FullReport() << "\n";
- std::cout << "Initial x: " << -1.2 << " y: " << 1.0 << "\n";
- std::cout << "Final x: " << parameters[0] << " y: " << parameters[1]
- << "\n";
- return 0;
- }
|