[Rd] Problem with hessian in deriv3 (PR#2577)

j.c.rougier@durham.ac.uk j.c.rougier@durham.ac.uk
Mon Feb 24 18:06:02 2003


Hi Everyone,

I noticed the following in deriv3:

> deriv3(expression(x * y - b * z), c("x", "y", "z"))
expression({
    .value <- x * y - b * z
    .grad <- array(0, c(length(.value), 3), list(NULL, c("x", 
        "y", "z")))
    .hessian <- array(0, c(length(.value), 3, 3), list(NULL, 
        c("x", "y", "z"), c("x", "y", "z")))
    .grad[, "x"] <- y
    .grad[, "y"] <- x
    .grad[, "z"] <- -b
    .hessian[, "z", "z"] <- 0
    attr(.value, "gradient") <- .grad
    attr(.value, "hessian") <- .hessian
    .value
})

where the hessian is incorrectly computed as being 0 everywhere -- it
should be 1 at (x, y) and (y, x).  Interestingly, if I precede x * y
by unary minus the hessian is correct:

> deriv3(expression(- x * y - b * z), c("x", "y", "z"))
expression({
    .expr1 <- -x
    .value <- .expr1 * y - b * z
    .grad <- array(0, c(length(.value), 3), list(NULL, c("x", 
        "y", "z")))
    .hessian <- array(0, c(length(.value), 3, 3), list(NULL, 
        c("x", "y", "z"), c("x", "y", "z")))
    .grad[, "x"] <- -y
    .hessian[, "x", "x"] <- 0
    .hessian[, "x", "y"] <- .hessian[, "y", "x"] <- -1
    .hessian[, "x", "z"] <- .hessian[, "z", "x"] <- 0
    .grad[, "y"] <- .expr1
    .hessian[, "y", "y"] <- 0
    .hessian[, "y", "z"] <- .hessian[, "z", "y"] <- 0
    .grad[, "z"] <- -b
    .hessian[, "z", "z"] <- 0
    attr(.value, "gradient") <- .grad
    attr(.value, "hessian") <- .hessian
    .value
})

Cheers, Jonathan.

--please do not edit the information below--

Version:
 platform = i686-pc-linux-gnu
 arch = i686
 os = linux-gnu
 system = i686, linux-gnu
 status = 
 major = 1
 minor = 6.1
 year = 2002
 month = 11
 day = 01
 language = R

Search Path:
 .GlobalEnv, Autoloads, package:base