笔者在学习视觉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);
}
输出结果为
即优化得到了一个更好的结果,不知道为什么会这样。