我成功地使用了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
http://eigen.tuxfamily.org/dox/unsupported/classEigen_1_1LevenbergMarquardt.html#a20efa2f5a684efaf2499ba5bdd51e792
我不清楚“对角线移位的步长界限”通过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);发布于 2016-01-12 03:44:12
这是minpack中的一个端口,因此您还可以查看它的documentation
因子是用于确定初始步长界限的正输入变量。这个界限被设置为因子和diag*x的欧几里得范数的乘积,如果不是零,则设置为因子本身。在大多数情况下,因素应该存在于间隔(.1,100。).100中。是一般推荐值。
发布于 2021-05-23 16:08:42
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
https://stackoverflow.com/questions/34701160
复制相似问题