[R] optim with gradient

Göran Broström gb at stat.umu.se
Wed Mar 20 14:31:03 CET 2002

I want to maximise a function using 'optim' with a method that requires 
the gradient, so I supply two functions, 'fun' for the function value
and 'd.fun' for its gradient. My question is: Since some calculations are 
common to the two functions, is it possible to save time by feeding 
'd.fun' with some of the calculations made in 'fun'? That would require
(at least) that it is guaranteed that each time 'd.fun' is evaluated, it 
is done immediately after a call to 'fun' at the same parameter value.
The help page says:  

"It is guaranteed that `gr' will be called immediately after a
call to `fn' at the same parameter values."

which is not exactly the same. However, look at this trivial example:

prov <- function(x.start = 0){
  fun <- function(x) {
    e.x <- exp(-x)
    x * e.x
  d.fun <- function(x) {
    e.x <- exp(-x)
    e.x * (1 - x)
  optim(x.start, fun, d.fun, method = "BFGS", 
     control = list(fnscale = -1))

> prov(2)$counts
function gradient 
      19        9 

This contradicts the help page info, since that implies that the gradient 
is called at least as many times as the function. 

Q1: What is the correct guarantee? Is it what I need?

Q2: If so, How do I share calculations between the two functions? In my 
    trivial example, exp(-x) is calculated in both.

Thanks for any enlightenment! (Brian?)

 Göran Broström                      tel: +46 90 786 5223
 professor                           fax: +46 90 786 6614
 Department of Statistics            http://www.stat.umu.se/egna/gb/
 Umeå University
 SE-90187 Umeå, Sweden             e-mail: gb at stat.umu.se

r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch

More information about the R-help mailing list