记录Ceres优化中遇到的一个奇怪问题

阅读 69

2022-04-03

笔者在学习视觉SLAM十四讲的第6讲非线性优化时,运行使用Ceres拟合曲线的例程,发现当生成数据为如下代码时

  vector<double> x_data, y_data;      // 数据
  for (int i = 0; i < N; i++) {
    double x = i / 100.0;
    x_data.push_back(x);
    double real = exp(ar * x * x + br * x + cr);
    double gauss_noise = rng.gaussian(w_sigma * w_sigma);
    y_data.push_back(real + gauss_noise);
    cout << real << '\t' << gauss_noise << endl;
    // rng.gaussian(w_sigma * w_sigma);
  }

输出为

当把注释去掉,即为如下代码时

vector<double> x_data, y_data; // 数据
  for (int i = 0; i < N; i++)
  {
    double x = i / 100.0;
    x_data.push_back(x);
    double real = exp(ar * x * x + br * x + cr);
    double gauss_noise = rng.gaussian(w_sigma * w_sigma);
    y_data.push_back(real + gauss_noise);
    cout << real << '\t' << gauss_noise << endl;
    rng.gaussian(w_sigma * w_sigma);
  }

输出结果为

即优化得到了一个更好的结果,不知道为什么会这样。

精彩评论(0)

0 0 举报