<rkevinburton <at> charter.net> writes: > > In the documentation for 'optim' it gives the following function: > > fr <- function(x) { ## Rosenbrock Banana function > x1 <- x[1] > x2 <- x[2] > 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 > } > optim(c(-1.2,1), fr) > > When I run this code I get: > > $par > [1] 1.000260 1.000506 > > I am sure I am missing something but why isn't 1,1 a better answer? If I plug 1,1 in the function it seems that > the function is zero. Whereas the answer given gives a function result of 8.82e-8. This was after 195 calls > to the function (as reported by optim). The documentation indicates that the 'reltol' is about 1e-8. Is > this the limit that I am bumping up against? > > Kevin >
Yes, this is basically just numeric fuzz, the bulk of which probably comes from finite-difference evaluation of the derivative. As demonstrated below, you can get a lot closer by defining an analytic gradient function. May I ask why this level of accuracy is important? (Insert Tukey quotation here about approximate answers to the right question here ...) Ben Bolker --------- fr <- function(x) { ## Rosenbrock Banana function x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } ## gradient function frg <- function(x) { x1 <- x[1] x2 <- x[2] c(100*(4*x1^3-2*x2*2*x1)-2+2*x1, 100*(2*x2-2*x1^2)) } ## use numericDeriv to double-check my calculus x1 <- 1.5 x2 <- 1.7 numericDeriv(quote(fr(c(x1,x2))),c("x1","x2")) frg(c(x1,x2)) ## optim(c(-1.2,1), fr) ## Nelder-Mead optim(c(-1.2,1), fr,method="BFGS") optim(c(-1.2,1), fr, gr=frg,method="BFGS") ## use gradient ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.