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
> 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