CERES_SOLVER中的模型拟合
Model fitting in ceres_solver
我正在使用Ceres-Solver优化我的蒙特卡洛(MC)模拟一组参数(9个)。基本上,MC代码返回每组参数的results = { {1,2,3,...,19} }
类型的Armadillo双矩阵。我有一组相应的数据。如何使用CERES-SOLVER优化参数?
这是到目前为止的代码:
using ceres::AutoDiffCostFunction;
using ceres::CostFunction;
using ceres::CauchyLoss;
using ceres::Problem;
using ceres::Solver;
using ceres::Solve;
struct SimulationResidual {
SimulationResidual(): y_{346.301,346.312,346.432,346.394,346.471,346.605,346.797,346.948,347.121,347.384,347.626,348.08,348.561,349.333,350.404,351.761,352.975,354.17,354.809} {};
template <typename T> bool operator()(const T* const T_params,
T* residual) const {
Tm = T_params[0];
g31= T_params[1];
g32= T_params[2];
gg31= T_params[3];
gg32= T_params[4];
bn = T_params[5];
bu = T_params[6];
mn = T_params[7];
mu = T_params[8];
mat Tjumpave = Tjump_ave(); // MC simulation
residual[0] = Tjumpave(0,0) - T(y_[0]);
residual[1] = Tjumpave(0,1) - T(y_[1]);
residual[2] = Tjumpave(0,2) - T(y_[2]);
residual[3] = Tjumpave(0,3) - T(y_[3]);
residual[4] = Tjumpave(0,4) - T(y_[4]);
residual[5] = Tjumpave(0,5) - T(y_[5]);
residual[6] = Tjumpave(0,6) - T(y_[6]);
residual[7] = Tjumpave(0,7) - T(y_[7]);
residual[8] = Tjumpave(0,8) - T(y_[8]);
residual[9] = Tjumpave(0,9) - T(y_[9]);
residual[10] = Tjumpave(0,10) - T(y_[10]);
residual[11] = Tjumpave(0,11) - T(y_[11]);
residual[12] = Tjumpave(0,12) - T(y_[12]);
residual[13] = Tjumpave(0,13) - T(y_[13]);
residual[14] = Tjumpave(0,14) - T(y_[14]);
residual[15] = Tjumpave(0,15) - T(y_[15]);
residual[16] = Tjumpave(0,16) - T(y_[16]);
residual[17] = Tjumpave(0,17) - T(y_[17]);
residual[18] = Tjumpave(0,18) - T(y_[18]);
return true;
}
private:
const double y_[19];
};
int main(int argc, char** argv) {
wall_clock timer;
timer.tic();
google::InitGoogleLogging(argv[0]);
double T_params[] = { Tm,g31,g32,gg31,gg32,bn,bu,mn,mu }; // initial guess
Problem problem;
CostFunction* cost_function =
new AutoDiffCostFunction<SimulationResidual, 19, 1, 1>
( new SimulationResidual() );
problem.AddResidualBlock(cost_function, new CauchyLoss(0.5), &T_params);
}
用-lceres和-lglog编译XCode(我已经安装了Eigen3和所有内容。包装的示例无错误地运行),我将non-matching member function for call to 'AddResidualBlock'
作为错误之一。请让我知道我是否需要提供更多信息来帮助您。
谢谢。
编辑错误在problem.AddResidualBlock
行上。
我知道这个问题已经快5年了,但是您必须通过T_params
,而不是&T_params
,欢迎您:)
相关文章:
- 来自colPivHouseholderQr().solve的拟合相关性
- 最小二乘多项式拟合仅适用于偶数个坐标
- 这是异或测试中的过度拟合还是欠拟合?
- CERES_SOLVER中的模型拟合
- 如何使商店成为内存的开始和结束,以获得最佳拟合
- 如何添加到链接列表中以获得最佳拟合管理或删除某些内容
- C 的数字拟合的错误表示
- GSL线性拟合使用向量
- 在C/C 中实现实时最佳拟合内存分配算法
- 使用 GSL 的非线性拟合
- 用最小二乘法拟合圆
- 需要一个C++库来将曲线拟合到数据点
- 图像曲线拟合的多项式最小二乘法
- 二进制搜索树最佳拟合算法:输出不正确
- 如何用C++将2D散射数据与直线拟合
- OpenCV 高斯曲线拟合
- C++数学:拟合复杂函数不起作用
- 局部曲面拟合到 3d 点
- 如何在C++中进行二维二次拟合
- 使用 GSL 拟合分段"broken stick"模型