22 lines
583 B
R
22 lines
583 B
R
|
#' Numeric differentiation
|
||
|
#'
|
||
|
#' @example inst/examples/num_deriv.R
|
||
|
#'
|
||
|
#' @export
|
||
|
num.deriv <- function(F, X, h = 1e-6, sym = FALSE) {
|
||
|
if (sym) {
|
||
|
stopifnot(isSymmetric(X))
|
||
|
p <- nrow(X)
|
||
|
k <- seq_along(X) - 1
|
||
|
mapply(function(i, j) {
|
||
|
dx <- h * ((k == i * p + j) | (k == j * p + i))
|
||
|
(F(X + dx) - F(X - dx)) / (2 * h)
|
||
|
}, .row(dim(X)) - 1, .col(dim(X)) - 1)
|
||
|
} else {
|
||
|
sapply(seq_along(X), function(i) {
|
||
|
dx <- h * (seq_along(X) == i)
|
||
|
(F(X + dx) - F(X - dx)) / (2 * h)
|
||
|
})
|
||
|
}
|
||
|
}
|