Demo entry 6742576

Bisect

   

Submitted by anonymous on May 18, 2018 at 09:34
Language: Matlab. Code size: 1.1 kB.

function[C, c,err,yc] = bisect(f,a,b,delta)  
%INPUT - f is the function  
%      - a and b are the left and right endpoints  
%      delta is the tolerance  
%OUTPUT-c is the zero  
%      - yc = f(c)  
%      - err is the error estimate for c  
%      - C is the matrix of the c in history :  
%           first line is c; second line is yc; third line is approximate  
%           error  
  
digits(5);  
ya = feval(f,a);  
yb = feval(f,b);  
max1 = 1+round((log(b-a)-log(delta))/log(2));  
C=[];  
  
if ya*yb>0  
    disp(["Note: ya*yb>0"])  
    c=0;  
    err=0;  
    yc=0;  
    return  
end  
  
for k=1:max1  
    c = (a+b)/2;  
    yc = feval(f,c);  
    err = abs(b-a)/2;  
    r=[vpa(c) vpa(yc) vpa(err)];  
    C=[C;r];  
    if abs(yc)<=delta/100  
        a=c;  
        b=c;  
    elseif yb*yc>0  
        b=c;  
        yb=yc;  
    else  
        a=c;  
        ya=yc;  
    end  
    if b-a<delta  
        break  
    end  
end  
  
c=vpa((a+b)/2);  
err = abs(b-a)/2;  
yc = feval(f,c);  

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).