binseqtest (version 1.0.3)

unirootDiscrete: Identify where a non-increasing function changes sign

Description

Let f be a non-increasing (or non-decreasing) function that changes sign within the interval specified. If 'pos.side'=TRUE (or FALSE) then unirootDiscrete finds the value x such that f(x) is closest to the sign change and is positive (or negative).

Usage

unirootDiscrete(f, interval, lower = min(interval), 
    upper = max(interval), tol = 10^-5, pos.side = FALSE,
    print.steps = FALSE, maxiter = 1000, ...)

Value

A list with the folllowing elements,

iter

number of iterations (times f is evaluated)

f.root

value of f(x), where x is the root

root

the root x, where f(x)>=0 if pos.side=TRUE

...

Arguments

f

function for which a root is needed

interval

an interval giving minimum and maximum allowable values for root

lower

lower bound for root

upper

upper bound for root

tol

absolute tolerance, abs(true root-estimated root)<= tol

pos.side

if TRUE finds value x closest to the sign change in f, such that f(x)>0

print.steps

if true prints interations

maxiter

maximum number of iterations

...

additional arguments to f

Author

M.P. Fay

Details

The algorithm evaluates f(x) iteratively, and the change in 'x' is halved each iteration until the change in 'x' is less than tol. Then the root is returned according to the pos.side parameter.

Examples

Run this code
test<-function(x,parm=10.987654321){ ifelse(x>=parm,1,-1) }
unirootDiscrete(test,lower=0,upper=100,tol=10^-4,pos.side=FALSE,print.steps=TRUE)

Run the code above in your browser using DataCamp Workspace