function [xvect,xdif,fx,nit]=bisezione(a,b,toll,nmax,fun)
%
% ALGORITMO DI BISEZIONE
% INPUT
% a     : Estremo sinistro dell'intervallo
% b     : Estremo destro dell'intervallo
% toll  : Tolleranza del metodo
% nmax  : Numero massimo di iterazioni
% fun   : Stringa con il nome della funzione specificata su un mfile
%
% OUTPUT
% xvect : Vettore delle successioni delle x
% xdif  : Vettore dell'ampiezza degli intervalli
% fx    : Vettore delle successioni delle f(x)
% nit   : Iterazioni totali del metodo



% errore iniziale pari a tolleranza piu 1
% in modo tale da entrare almeno una volta nel ciclo iterativo
err = toll+1;
% iterazioni totali iniziali pari a zero
nit = 0;
% vettore delle successioni delle x (inizializzazione a vuoto)
xvect = [];
% vettore delle successioni delle f(x) (inizializzazione a vuoto)
fx = [];
% vettore dell'ampiezza degli intervalli (inizializzazione a vuoto)
xdif = [];

% CICLO PRINCIPALE
while (nit < nmax & err > toll)
   % aggiorno contatore delle iterazioni
   nit = nit+1;
   % trovo punto medio
   c = (a+b)/2;
   % valutazione della funzione nel punto medio
   fc = feval(fun,c);
   % salvataggio del punto medio 
   xvect = [xvect;c];
   % salvataggio del valore della funzione
   fx = [fx;fc];
   % verifica se abbiamo trovato lo zero della funzione
   if abs(fc)<=1e-10
      break;
   end
   % valutazione del nuovo intervallo
   if (fc*feval(fun,a) < 0)
      b=c;
   else
      a=c;
   end
   % valutazione errore
   err = abs(b-a);
   % salvataggio differenza intervalli
   xdif=[xdif;err];
end
