std::vector<double> params{1.0}; // 参数 ceres::CostFunction* cost_function = new ceres::AutoDiffCostFunction<MyResidual, 1, 1>(new MyResidual); problem.AddResidualBlock(cost_function, nullptr, params.data());输出雅克比矩阵
时间: 2024-03-19 10:44:21 浏览: 54
ceres-python:ceres-solver的Python绑定
要输出雅克比矩阵,需要使用ceres库中的Problem::Evaluate函数。这个函数可以计算出问题中所有残差的值和雅克比矩阵。下面是一个简单的示例代码:
```
ceres::Problem problem;
// 添加残差项和参数
std::vector<double> params{1.0};
ceres::CostFunction* cost_function = new ceres::AutoDiffCostFunction<MyResidual, 1, 1>(new MyResidual);
problem.AddResidualBlock(cost_function, nullptr, params.data());
// 构建options,并设置需要计算雅克比矩阵
ceres::Solver::Options options;
options.num_threads = 1;
options.update_state_every_iteration = true;
options.linear_solver_type = ceres::DENSE_QR;
options.gradient_tolerance = 1e-16;
options.function_tolerance = 1e-16;
options.minimizer_progress_to_stdout = true;
options.check_gradients = true;
// 创建Solver并求解问题
ceres::Solver::Summary summary;
ceres::Solve(options, &problem, &summary);
// 获取雅克比矩阵
Eigen::MatrixXd jacobian;
problem.Evaluate(ceres::Problem::EvaluateOptions(), nullptr, nullptr, nullptr, &jacobian);
// 输出雅克比矩阵
std::cout << "Jacobian:\n" << jacobian << std::endl;
```
注意,在Problem::Evaluate函数中,我们传入了一个空指针,表示不需要计算问题中的残差值。而最后一个参数&jacobian则表示我们需要计算雅克比矩阵,并将结果存储在jacobian这个Eigen::MatrixXd对象中。
阅读全文