On 21/12/2010 2:39 PM, casperyc wrote:
Hi all,I am writing a simple function to implement regularfalsi (secant) method. ################################################### regulafalsi=function(f,x0,x1){ x=c() x[1]=x1 i=1 while ( f(x[i])!=0 ) { i=i+1 if (i==2) { x[2]=x[1]-f(x[1])*(x[1]-x0)/(f(x[1])-f(x0)) } else { x[i]=x[i-1]-f(x[i-1])*(x[i-1]-x[i-2])/(f(x[i-1])-f(x[i-2])) } } x[i] } ################################################### These work fine, regulafalsi(function(x) x^(1/2)+3*log(x)-5,1,10) regulafalsi(function(x) x^(1/2)+3*log(x)-5,10,1) For all x>0, the function is strictly increasing. Then regulafalsi(function(x) x^(1/2)+3*log(x)-5,1,100) Error in while (f(x[i]) != 0) { : missing value where TRUE/FALSE needed In addition: Warning message: In log(x) : NaNs produced I dont know what happened there, is there a way to find the value for f(x[i]) that R can't determine TRUE/FALSE?
The easiest is to just use regular old-fashioned debugging methods, i.e. insert print() or cat() statements into your function. You could also try debug(regulafalsi) and single step through it to see where things go wrong. (An obvious guess is that one of the values being passed to f is negative, but you'll have to figure out why that happened and what to do about it.)
Duncan Murdoch ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

