123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #include "ceres/ceres.h"
- #include "glog/logging.h"
- struct Rosenbrock {
- template <typename T>
- bool operator()(const T* parameters, T* cost) const {
- const T x = parameters[0];
- const T 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::AutoDiffFirstOrderFunction<Rosenbrock, 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;
- }
|