## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----eval = FALSE-------------------------------------------------------------
# # CRAN release
# install.packages("arcopt")
# 
# # Development version from GitHub (requires the devtools package)
# devtools::install_github("marcus-waldman/arcopt")

## ----eval = FALSE-------------------------------------------------------------
# arcopt(x0, fn, gr, hess, ..., lower, upper, control)

## ----setup--------------------------------------------------------------------
library(arcopt)

rosenbrock <- function(x) {
  (1 - x[1])^2 + 100 * (x[2] - x[1]^2)^2
}

rosenbrock_gr <- function(x) {
  c(-2 * (1 - x[1]) - 400 * x[1] * (x[2] - x[1]^2),
    200 * (x[2] - x[1]^2))
}

rosenbrock_hess <- function(x) {
  matrix(c(1200 * x[1]^2 - 400 * x[2] + 2, -400 * x[1],
           -400 * x[1],                     200),
         2, 2)
}

result <- arcopt(
  x0 = c(-1.2, 1),
  fn = rosenbrock,
  gr = rosenbrock_gr,
  hess = rosenbrock_hess
)

## -----------------------------------------------------------------------------
result$par
result$value
result$converged
result$iterations

## -----------------------------------------------------------------------------
min(eigen(result$hessian, only.values = TRUE)$values)

## -----------------------------------------------------------------------------
str(result$diagnostics)

