我成功使用了Eigen的Levenberg-Marquart课程,其示例来自:http://techblog.rga.com/determining-indoor-position-using-ibeacon/
我试图找出如何将阻尼参数lambda转换为Eigen中可用的参数:
https://en.wikipedia.org/wiki/Levenberg-Marquardt_algorithm#Choice_of_damping_parameter
我不清楚对角线移位的步骤是什么?#34;通过setFactor() - 这与阻尼参数有关吗?
distance_functor functor(matrix, count);
Eigen::NumericalDiff<distance_functor> numDiff(functor);
Eigen::LevenbergMarquardt<Eigen::NumericalDiff<distance_functor>,double> lm(numDiff);
lm.parameters.factor = 100; //step bound for the diagonal shift, is this related to damping parameter, lambda?
lm.parameters.maxfev = 2000;//max number of function evaluations
lm.parameters.xtol = 1.49012e-08; //tolerance for the norm of the solution vector
lm.parameters.ftol = 1.49012e-08; //tolerance for the norm of the vector function
lm.parameters.gtol = 0; // tolerance for the norm of the gradient of the error vector
lm.parameters.epsfcn = 0; //error precision
Eigen::LevenbergMarquardtSpace::Status ret = lm.minimize(x);
答案 0 :(得分:1)
这是来自minpack的端口,因此您还可以查看其documentation:
factor是用于确定的正输入变量 初始步骤。这个界限设置为的产物 因素和diag * x的欧几里德范数,如果非零,或者 考虑自己。在大多数情况下,因素应该在于 间隔(.1,100。)。100。是一般推荐的值。
答案 1 :(得分:1)
Eigen::LevenbergMarquardt 不使用 Tikhonov 正则化(“阻尼参数”)来寻找下一个高斯-牛顿方向。它随后调用一个 MINPACK' 子程序 lmpar2(qrfac, m_diag, m_qtf, m_delta, m_par, m_wa1) 寻找(如果不适定)在约束下的高斯-牛顿方向 m_wa1
|| m_diag * m_wa1 || <= m_delta,
即对角矩阵 m_diag 和正参数 m_delta 的实例在每次调用 lmpar2 时都会发生变化。
https://github.com/lunixbochs/eigen/blob/master/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h
http://docs.ros.org/en/indigo/api/acado/html/lmpar_8h_source.html