2016-01-10 8 views
0

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

Я пытаюсь понять, как перевести параметр затухания, лямбду, в параметры, доступные в Эйгене:

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

http://eigen.tuxfamily.org/dox/unsupported/classEigen_1_1LevenbergMarquardt.html#a20efa2f5a684efaf2499ba5bdd51e792

Это не для меня ясно, что делает «шаг связан для диагонального сдвига» с помощью setFactor() - я s это связано с параметром затухания?

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); 

ответ

1

Это порт с MINPACK, так что вы можете также посмотреть на его documentation:

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