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
if nargin < 4, TolX = 1.0e-6; end

%metodo da bissecao

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

for k = 1:MaxIter
    xx(k) = .5*(a+b);
    fx    = feval(f,xx(k));
    err   = abs(.5*(a-b)); 
    if err < TolX | abs(fx) < TolFun, break;
    elseif fx*fa>0, a = xx(k); fa = fx;
    else b = xx(k);
    end
end
x = xx(k);
if k == MaxIter
    disp('Numero maximo de iteracoes foi excedido!!!!')
end

% geracao do grafico

%xMax = ceil(max(xx)+1); 
%xMin = ceil(min(xx)-1);
%int  = xMax - xMin; 
%t = xMin:int/100:xMax;
%plot(t, g(t))