# [R] using optimize() correctly ...

Berend Hasselman bhh at xs4all.nl
Sun May 24 07:52:18 CEST 2009

```

Esmail Bonakdarian-4 wrote:
>
> Hi,
>
> I am trying to use the optimize function to optimize a function. The
> results I am getting don't agree with what I compute on my own and
> when I look at the graph of
>
>      f(x) = 100 + ((x-10)**2 + (x-10)) * cos(x-10), where -10 <= x <= 10
>
> in gnuplot.
>
> I suspect I am making a mistake in the usage of the R optimize
> function, perhaps someone could point out where?
>
>
>  > f<-function(x) 100 + ((x-10)**2 + (x-10)) * cos(x-10)
>
> to MAXIMIZE:
>
>  > result=optimize(f, c(-10,10), lower = -10, upper=10, maximum=TRUE)
>  > result
> \$maximum
> [1] -2.728743
>
> \$objective
> [1] 247.3284
>
> to MINIMIZE
>
>  > result=optimize(f, c(-10,10), lower = -10, upper=10, maximum=FALSE)
>  > result
> \$minimum
> [1] 6.290112
>
> \$objective
> [1] 91.52681
>
>
> However, I believe the correct values should be
>
> minimize:
> x = -5.838   val= -133.020
>
> maximize:
> x = -8.957   val= 438.448
>
>

The help for optimize states:

"If f is not unimodal, then optimize() may approximate a local, but perhaps
non-global, minimum to the same accuracy."

In you case, optimize is locating a local maximum/minimum.

You should restrict the search to the interval [-10 , -7 ] so

result=optimize(f, c(-10,10), lower = -10, upper=-7, maximum=TRUE)