Ceres是一个广泛使用的最小二乘问题求解库。
Ceres求解的最小二乘问题最一般的形式如下
min x 1 2 ∑ i ρ i ( ∣ ∣ f i ( x i 1 , . . . , x i n ∣ ∣ 2 ) \min_{x}\frac{1}{2}\sum_{i}\rho_{i}(||f_{i}(x_{i1}, ... , x_{in}||^{2}) xmin21i∑ρi(∣∣fi(xi1,...,xin∣∣2)
其中 f i f_{i} fi为代价函数,在ceres中为残差块, ρ i \rho_{i} ρi为核函数,如果不用的话,那么目标函数仍然是许多平方项的和。
Ceres求解步骤:
- 定义每个参数块,可以是向量,也可以是四元数,李代数。
如果是向量,需要为每个参数块分配double数组来储存变量的值。 - 定义残差块的计算公式。
- 残差块需要定义雅可比的计算方式,也可以采用Ceres的自动求导功能。如果用自动求导,需要重载一个()操作符。
- 把参数块和残差块加入Ceres的problem对象中,调用Solve函数求解。
示例:
假设要拟合一个曲线 y = e x p ( a x 2 + b x + c ) + w y=exp(ax^{2}+bx+c)+w y=exp(ax2+bx+c)+w
其中w是高斯噪声,现有N个数据(x, y)
那么最小二乘问题如下,这里不用核函数
min a , b , c 1 2 ∑ i = 1 N ( ∣ ∣ y i − e x p ( a x i 2 + b x i + c ) ∣ ∣ 2 ) \min_{a,b,c}\frac{1}{2}\sum_{i=1}^{N}(||y_{i}-exp(ax_{i}^{2}+bx_{i}+c)||^{2}) a,b,cmin2

本文介绍了Ceres库用于解决最小二乘问题,展示了其在曲线拟合问题上的应用。通过对比高斯牛顿法的解题过程,解释了Ceres如何简化优化步骤并利用自动求导功能。示例中,使用Ceres和高斯牛顿法分别求解曲线拟合问题,最终得出相同的结果,强调了Ceres在实际问题中的高效性和易用性。
最低0.47元/天 解锁文章
1313

被折叠的 条评论
为什么被折叠?



