最近在学高博的14讲,跟着教程的实战内容自己敲代码,到ceres实战的部分遇到了问题。程序是用ceres解决一个最小二乘问题,来拟合曲线,程序编译运行都通过了,但是优化结果与预期有很大差异,如图:
教程中优化结果应该接近a = 1, b = 2, c = 1,而我的结果是2 -1 1。
于是用gdb调试程序,发现数据点的x值居然全部是0!
于是看x生成的代码,发现问题:i是整形,100是整形,商会被强转为整形,于是得到一堆0。改为 i / 100.0,这时商是double类型,最后运行成功,结果正确。
这次的错误虽然很基本,但是由此得到教训,程序出问题要勤调试,今后要多多提升自己debug能力。