Я успешно использую класс Левенберга-Маркварта Эйгена, следуя примеру из: http://techblog.rga.com/determining-indoor-position-using-ibeacon/
Я пытаюсь выяснить, как преобразовать лямбда-параметр демпфирования в параметры, доступные в Eigen:
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, так что вы также можете посмотреть на его документация:
коэффициент является положительной входной переменной, используемой при определении
начальный шаг привязан. эта граница устанавливается на произведение
фактор и евклидова норма diag * x, если ненулевой, или иначе
факторировать себя. в большинстве случаев фактор должен лежать в
интервал (0,100.). 100. это обычно рекомендуемое значение.
Других решений пока нет …