### Name: nlminb ### Title: Optimization using PORT routines ### Aliases: nlminb ### Keywords: optimize ### ** Examples x <- rnbinom(100, mu = 10, size = 10) hdev <- function(par) { -sum(dnbinom(x, mu = par[1], size = par[2], log = TRUE)) } nlminb(c(9, 12), hdev) nlminb(c(20, 20), hdev, lower = 0, upper = Inf) nlminb(c(20, 20), hdev, lower = 0.001, upper = Inf) ## slightly modified from the S-PLUS help page for nlminb # this example minimizes a sum of squares with known solution y sumsq <- function( x, y) {sum((x-y)^2)} y <- rep(1,5) x0 <- rnorm(length(y)) nlminb(start = x0, sumsq, y = y) # now use bounds with a y that has some components outside the bounds y <- c( 0, 2, 0, -2, 0) nlminb(start = x0, sumsq, lower = -1, upper = 1, y = y) # try using the gradient sumsq.g <- function(x,y) 2*(x-y) nlminb(start = x0, sumsq, sumsq.g, lower = -1, upper = 1, y = y) # now use the hessian, too sumsq.h <- function(x,y) diag(2, nrow = length(x)) nlminb(start = x0, sumsq, sumsq.g, sumsq.h, lower = -1, upper = 1, y = y) ## Rest lifted from optim help page fr <- function(x) { ## Rosenbrock Banana function x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } grr <- function(x) { ## Gradient of 'fr' x1 <- x[1] x2 <- x[2] c(-400 * x1 * (x2 - x1 * x1) - 2 * (1 - x1), 200 * (x2 - x1 * x1)) } nlminb(c(-1.2,1), fr) nlminb(c(-1.2,1), fr, grr) flb <- function(x) { p <- length(x); sum(c(1, rep(4, p-1)) * (x - c(1, x[-p])^2)^2) } ## 25-dimensional box constrained ## par[24] is *not* at boundary nlminb(rep(3, 25), flb, lower=rep(2, 25), upper=rep(4, 25)) ## trying to use a too small tolerance: r <- nlminb(rep(3, 25), flb, control = list(rel.tol=1e-16)) stopifnot(grepl("rel.tol", r$message))