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 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.
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.
Enrico Schumann
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. tools:::Rd_expr_doi("10.1016/C2017-0-01621-X")
Schumann, E. (2023) Financial Optimisation with R (NMOF Manual). https://enricoschumann.net/NMOF.htm#NMOFmanual
uniroot
(in package stats)
## 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