
subplex
minimizes a function.
subplex(par, fn, control = list(), hessian = FALSE, ...)
subplex
returns a list containing the following:
Estimated parameters that minimize the function.
Minimized value of the function.
Number of function evaluations required.
Convergence code (see Details).
A character string giving a diagnostic message from the optimizer, or 'NULL'.
Hessian matrix.
Initial guess of the parameters to be optimized over.
The function to be minimized. Its first argument must be the vector of parameters to be optimized over. It should return a scalar result.
A list of control parameters, consisting of some or all of the following:
The relative optimization tolerance
for par
. This must be a positive number. The default value is
.Machine$double.eps
.
Maximum number of function
evaluations to perform before giving up. The default value is 10000
.
The scale and initial stepsizes for the components of
par
. This must either be a single scalar, in which case the same
scale is used for all parameters, or a vector of length equal to the length
of par
. For parscale
to be valid, it must not be too small
relative to par
: if par + parscale = par
in any component,
parscale
is too small. The default value is 1
.
If hessian=TRUE
, the Hessian of the objective at the
estimated optimum will be numerically computed.
Additional arguments to be passed to the function fn
.
Aaron A. King kingaa@umich.edu
The convergence codes are as follows:
invalid input
number of function evaluations needed exceeds maxnfe
success: tolerance tol
satisfied
limit of machine precision reached
For more details, see the source code.
T. Rowan, ``Functional Stability Analysis of Numerical Algorithms'', Ph.D. thesis, Department of Computer Sciences, University of Texas at Austin, 1990.
ripple <- function (x) {
r <- sqrt(sum(x^2))
1-exp(-r^2)*cos(10*r)^2
}
subplex(par=c(1),fn=ripple,hessian=TRUE)
subplex(par=c(0.1,3),fn=ripple,hessian=TRUE)
subplex(par=c(0.1,3,2),fn=ripple,hessian=TRUE)
## Rosenbrock Banana function
rosen <- function (x) {
x1 <- x[1]
x2 <- x[2]
100*(x2-x1*x1)^2+(1-x1)^2
}
subplex(par=c(11,-33),fn=rosen)
## Rosenbrock Banana function (using names)
rosen <- function (x, g = 0, h = 0) {
x1 <- x['a']
x2 <- x['b']-h
100*(x2-x1*x1)^2+(1-x1)^2+g
}
subplex(par=c(b=11,a=-33),fn=rosen,h=22,control=list(abstol=1e-9,parscale=5),hessian=TRUE)
Run the code above in your browser using DataLab