12 Optimization

  • The base R function for finding minima (the default) or maxima of functions of a single variable is optimize(). Eg:
> f <- function(x){
+   x*(20-2*x)*(16-2*x)
+ }
> 
> optimize(f, c(0,8), maximum=TRUE)
## $maximum
## [1] 2.945
## 
## $objective
## [1] 420.1
  • Another example:
> g <- function(x){
+   x*sin(4*x)
+ }
> 
> curve(g,0,3)

> 
> # the algorithm gives the first minimum encountered
> optimize(g, c(0,3))
## $minimum
## [1] 1.228
## 
## $objective
## [1] -1.204
> 
> # excluding the first minimum...
> optimize(g, c(1.5,3))
## $minimum
## [1] 2.771
## 
## $objective
## [1] -2.76
> 
> # to find the global maximum
> optimize(g, c(1,3), maximum=TRUE)
## $maximum
## [1] 1.995
## 
## $objective
## [1] 1.979
> 
> # or...
> minusg <- function(x){-g(x)}
> optimize(minusg, c(1,3))
## $minimum
## [1] 1.995
## 
## $objective
## [1] -1.979
> 
> # to find the global minimum
> curve(minusg,0,3)

> optimize(minusg, c(1,3), maximum=TRUE)
## $maximum
## [1] 2.771
## 
## $objective
## [1] 2.76
  • The pracma package contains the function findmins(), which finds the positions of all the minima in the search interval:
> library(pracma)
## 
## Attaching package: 'pracma'
## The following objects are masked from 'package:magrittr':
## 
##     and, mod, or
> curve(g,0,3)

> 
> g.mins <- findmins(g,0,3)
> g.mins # minima values
## [1] 1.228 2.771
> 
> g(g.mins) # minima values
## [1] -1.204 -2.760