Как установить демпфирование Левенберга-Марквардта с помощью Eigen

Я успешно использую класс Левенберга-Маркварта Эйгена, следуя примеру из: http://techblog.rga.com/determining-indoor-position-using-ibeacon/

Я пытаюсь выяснить, как преобразовать лямбда-параметр демпфирования в параметры, доступные в 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);

0

Решение

Это порт из Minpack, так что вы также можете посмотреть на его документация:

коэффициент является положительной входной переменной, используемой при определении
начальный шаг привязан. эта граница устанавливается на произведение
фактор и евклидова норма diag * x, если ненулевой, или иначе
факторировать себя. в большинстве случаев фактор должен лежать в
интервал (0,100.). 100. это обычно рекомендуемое значение.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]