Line  

1 
 bisection method for solving nonlinear equations 

2 


3 
delta=1e6  tolerance 

4 


5 
function bisect(f,a,b,fa,fb) 

6 
local c=(a+b)/2 

7 
io.write(n," c=",c," a=",a," b=",b,"\n") 

8 
if c==a or c==b or math.abs(ab)<delta then return c,ba end 

9 
n=n+1 

10 
local fc=f(c) 

11 
if fa*fc<0 then return bisect(f,a,c,fa,fc) else return bisect(f,c,b,fc,fb) end 

12 
end 

13 


14 
 find root of f in the inverval [a,b]. needs f(a)*f(b)<0 

15 
function solve(f,a,b) 

16 
n=0 

17 
local z,e=bisect(f,a,b,f(a),f(b)) 

18 
io.write(string.format("after %d steps, root is %.17g with error %.1e, f=%.1e\n",n,z,e,f(z))) 

19 
end 

20 


21 
 our function 

22 
function f(x) 

23 
return x*x*xx1 

24 
end 

25 


26 
 find zero in [1,2] 

27 
solve(f,1,2) 
