%==========================================================================
%                            Metodo de la Biseccion
%==========================================================================
%       Variables de Entrada
%---------------------------
%
%       fname   :       funcion f
%       [a , b] :       Intervalo que contiene un unico cero da funcion f
%       epsilon :       Variable que define el criterio de parada, que en
%                       este caso es |f(x_n)| < epsilon
%---------------------------
%       Variables de Salida
%-------------------------
%
%       xbarra  :       Aproximacion del cero de la funcion f en [a , b]
%       fxbarra :       Valor de la funcion f en el punto xbarra
%       errox   :       Error da Aproximacion del cero da funcion f
%       iter    :       Numero de iteraciones realizadas
%-------------------------------------------------------------------
        
clear

% dos ptos. iniciales

xo=-5;
x1=7;


fname='funcionF';
epsilon=1.e-6;

% evaluar funcion f en xo y x1

fx1 = feval(fname,x1);
fxo = feval(fname,xo);
maxiter =  50;
iter = 1;

if fxo*fx1 < 0 
    while abs(fx1) >= epsilon
        x2 =(xo+x1)*0.5;
        fx2=feval(fname,x2);    
    
        %----------------------------------------------------------------
        %       Verificamos se el punto Medio es raiz de la funcion
        %----------------------------------------------------------------

        iter=iter+1;
        fprintf(' Iteracion %1.0f\n Valor aprox de la raiz %1.8f Valor de la funcion %1.8f\n',iter,x2,fx2);
        if fx2*fx1 < 0 
            xo=x2;
            fxo=fx2;
        else
            x1=x2;
            fx1=fx2;
        end
        if iter <= maxiter
        else
            fprintf(' Numero maximo de iteraciones excedido \n');        
            break
        end
    end
else
    fprintf(' La funcion en los extremos del intervalo tiene el mismo signo \n');        
end
