Bracket the zeros (roots) of a univariate function
bracketing(fun, interval, ...,
lower = min(interval), upper = max(interval),
n = 20L,
method = c("loop", "vectorised", "multicore", "snow"),
mc.control = list(), cl = NULL)a univariate function; it will be called as fun(x, …) with
x being a numeric vector
a numeric vector, containing the end-points of the interval to be searched
further arguments passed to fun
lower end-point. Ignored if interval is specified.
upper end-point. Ignored if interval is specified.
the number of function evaluations. Must be at least 2 (in which
case fun is evaluated only at the end-points); defaults to 20.
can be loop (the default), vectorised, multicore
or snow. See Details.
a list containing settings that will be passed to mclapply if
method is multicore. Must be a list of named
elements. See the documentation of mclapply in package parallel.
default is NULL. If method is snow, this must be a
cluster object or an integer (the number of cores to be used). See the
documentation of packages parallel and snow.
A numeric matrix with two columns, named lower and upper. Each row contains one interval that contains at least one root. If no roots were found, the matrix has zero rows.
bracketing evaluates fun at equal-spaced values of x
between (and including) lower and upper. If the sign of
fun changes between two consecutive x-values,
bracketing reports these two x-values as containing (‘bracketing’)
a root. There is no guarantee that there is only one root
within a reported interval. bracketing will not narrow the chosen intervals.
The argument method determines how fun is
evaluated. Default is loop. If method is
"vectorised", fun must be written such that it can be
evaluated for a vector x (see Examples). If method is
multicore, function mclapply from package parallel
is used. Further settings for mclapply can be passed through
the list mc.control. If multicore is chosen but the
functionality is not available (eg, currently on Windows), then
method will be set to loop and a warning is issued. If
method is snow, function clusterApply from
package parallel is used. In this case, the argument cl
must either be a cluster object (see the documentation of
clusterApply) or an integer. If an integer, a cluster will be
set up via makeCluster(c(rep("localhost", cl)), type = "SOCK"),
and stopCluster is called when the function is exited. If
snow is chosen but the package is not available or cl is
not specified, then method will be set to loop and a
warning is issued. In case that cl is a cluster object,
stopCluster will not be called automatically.
Gilli, M., Maringer, D. and Schumann, E. (2019) Numerical Methods and Optimization in Finance. 2nd edition. Elsevier. https://www.elsevier.com/books/numerical-methods-and-optimization-in-finance/gilli/978-0-12-815065-8
Schumann, E. (2019) Financial Optimisation with R (NMOF Manual). http://enricoschumann.net/NMOF.htm#NMOFmanual
uniroot (in package stats)
# NOT RUN {
## Gilli/Maringer/Schumann (2011), p. 290
testFun <- function(x)
cos(1/x^2)
bracketing(testFun, interval = c(0.3, 0.9), n = 26L)
bracketing(testFun, interval = c(0.3, 0.9), n = 26L, method = "vectorised")
# }
Run the code above in your browser using DataLab