%-----------------------------------------------------------------------
%             -------------                             -------
%             function file                             bipar.m
%             -------------                             -------
%-----------------------------------------------------------------------
%                        ----------------------------
%                        Zeros Reais de Funcoes Reais
%                        ----------------------------
%                            --------------------
%                            Metodo da Biparticao
%                            --------------------
%
%            Chamada do Procedimento  bipar
%------------------------------------------
%            [xbarra,fxbarra,errox,iter] = bipar(fname,a,b)
%            [xbarra,fxbarra,errox,iter] = bipar(fname,a,b,epsilon)
%
%       Variaveis de Entrada
%---------------------------
%
%       fname   :       Nome da Function que contem a funcao
%       [a , b] :       Intervalo que contem um unico zero da funcao
%       epsilon :       Precisao da Aproximacao do zero da funcao(default=1e-6)
%
%       Variaveis de Saida
%-------------------------
%
%       xbarra  :       Aproximacao do zero da funcao em [a , b]
%       fxbarra :       Valor da funcao no ponto xbarra
%       errox   :       Erro da Aproximacao do zero da funcao
%       iter    :       Numero de Particoes realizadas
%-------------------------------------------------------------------
%
        function  [xbarra,fxbarra,errox,iter] = bipar(fname,a,b,epsilon)
%=======================================================================
%
%       --------------------
%       Metodo da Biparticao
%---------------------------
%
if nargin<4
    epsilon=1e-6;
end
           fa = feval(fname,a);
         iter = 0;
        limax =  50;
        errox = ( b - a )*0.5;
%       
        while ( (errox >  epsilon)  &  (iter < limax) )
%
         xbarra = ( b + a )*0.5;
        fxbarra = feval(fname,xbarra);
%
%       Verifica se o ponto Medio e' um zero da funcao
%-----------------------------------------------------
        if( abs(fxbarra) < epsilon ) , errox = abs(fxbarra); break , end
%
                if ( (fxbarra*fa) < 0.0 )
                 b = xbarra;
                else
                 a = xbarra;
                fa = fxbarra;
                end
%
        iter = iter + 1;
        errox = ( b - a )*0.5;
%
        end
%
%
%-----------------------------------------------------------------------
%-----------------------------------------------------------------------
%-----------------------------------------------------------------------
%--------------------------------------------------
%       Petronio Pulino
%       Departamento de Matemática Aplicada - D.M.A
%       IMECC - UNICAMP
%       e-mail: pulino@ime.unicamp.br
%       http://www.ime.unicamp.br/~pulino/MS411/
%--------------------------------------------------
