# R FUNCTION "MONSOLVE", TO FIND A POSITIVE ROOT OF # A (NON-VECTORISED) INCREASING FUNCTION OF ONE REAL VARIABLE. # # BY JEFFREY ROSENTHAL (www.probability.ca), February 2014 monsolve = function(ff, initx=1.0, numrep=10^4) { x = initx mult = 1.0 ssgn = sign(ff(x)) for (i in 1:numrep) { if (ff(x)<0) { x = x / runif(1)^mult if (ssgn<0) { ssgn = -ssgn mult = mult/2 } } else { x = x * runif(1)^mult if (ssgn>0) { ssgn = -ssgn mult = mult/2 } } # print(x) } return(x) }