我从以下示例中成功地使用了Eigen的Levenberg-Marquart类:

我试图弄清楚如何将阻尼参数lambda转换为Eigen中可用的参数:

http://techblog.rga.com/determining-indoor-position-using-ibeacon/

https://en.wikipedia.org/wiki/Levenberg-Marquardt_algorithm#Choice_of_damping_parameter

我不清楚通过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);

最佳答案

这是minpack的端口,因此您也可以查看其documentation


  因子是用于确定
    初始步骤绑定。此界限设置为
    因子和diag * x的欧几里得范数(如果非零),否则
    自己考虑。在大多数情况下,因素应该在于
    间隔(.1,100。)。100。是通常推荐的值。

关于c++ - 如何使用Eigen设置Levenberg-Marquardt阻尼,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34701160/

10-13 08:49