我正在尝试通过使用 Rosenbrock 函数来了解如何nls.lm
在 R 库minpack.lm
中使用,以查看算法是否在 f(x,y) = (1,1) 处收敛到全局最小值。无论有没有分析雅可比行列式,我都会这样做。在这两种情况下,我都会收到一条警告,告诉我算法已决定将调用中指定的最大迭代次数恢复nls.lm
为 1024:
Warning messages:
1: In nls.lm(par = initpar, fn = objective_rosenbrock, jac = gradient_rosenbrock, :
resetting `maxiter' to 1024!
2: In nls.lm(par = initpar, fn = objective_rosenbrock, jac = gradient_rosenbrock, :
lmder: info = -1. Number of iterations has reached `maxiter' == 1024.
由于我最初的猜测是 (-1.2, 1.0),因此该算法永远不会完全达到 (1,1)。我在 GitHub 上找到了该库的源代码,以下代码行与此处相关:
https://github.com/cran/minpack.lm/blob/master/src/nls_lm.c
OS->maxiter = INTEGER_VALUE(getListElement(control, "maxiter"));
if(OS->maxiter > 1024) {
OS->maxiter = 1024;
warning("resetting `maxiter' to 1024!");
}
为什么最大迭代次数限制为 1024 是否有任何逻辑?有位和 2^10 的东西?我想将该库用于不同的应用程序,但是这个迭代上限可能会阻止这种情况。任何见解将不胜感激。