function [x,err,xx] = bisct(f,a,b,TolX,MaxIter)

%function [x,err,xx] = bisct(f,a,b,TolX,MaxIter)
% resolve  f(x) = 0 usando o metodo da bissecao
% input : f, [a,b] = funcao e intervalo de busca
%          TolX = tolerancia, ou seja, TolX >|x(k) - x(k-1)|
%       MaxIter = numero maximo de iteracoes
%output :     x = ponto fixo (solucao)
%           err = ultimo de |x(k) - x(k-1)|
%            xx = historico de x


if nargin < 5, MaxIter = 100; end   %Nao usar na primeira vez
if nargin < 4, TolX = 1.0e-6; end   %Nao usar na primeira vez

flag   = 0;
k      = 0;

TolFun = eps;
fa = feval(f,a);
fb = feval(f,b);
if fa*fb > 0, error ('Devemos ter f(a)*f(b)<0 !'); end

%metodo da bissecao
while (flag == 0)
    k     = k+1;
    xx(k) = .5*(a+b);
    fx    = feval(f,xx(k));
    if fx*fa>0, a = xx(k); fa = fx;
    else b = xx(k);
    end
    err   = abs(.5*(a-b)); 
    if (err < TolX | abs(fx) < TolFun | k == MaxIter)
        flag = 1;
        if k == MaxIter
            disp('Numero maximo de iteracoes foi excedido!!!!')
        end
    end
end
x = xx(k);
% bloco para plotar o resultado (pode ser omitido)%
hold on                                           %
xe = min(xx):(max(xx)-min(xx))/100:max(xx)   ;    %
ye = feval(f,xe)  ;                               % 
yy = feval(f,xx)   ;                              %
plot(xx, yy,'r-.o',xe, ye,'b-')                   %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%