function [xvect,xdif,fx,it]=bisezione(a,b,nmax,toll,fun)
%
%  [xvect,xdif,fx,it]=bisezione(a,b,nmax,toll,fun) 
%
%  Metodo di bisezione per la risoluzione
%  dell'equazione non lineare f(x)=0
%
%  Parametri di ingresso:
%
%  a,b       Estremi intervallo di ricerca radice
%  nmax      Numero massimo di iterazioni
%  toll      Tolleranza sul test d'arresto
%  fun       funzione di cui trovare lo zero (definita come inline function o come function
%           in un file separato)
%
%  Parametri di uscita:
%
%  xvect     Vett. contenente tutte le iterate
%            calcolate (l'ultima componente e' la soluzione)
%  xdif      Vett. contenente l'avanzamento tra due iterate
%  fx        Vett. contenente le valutazioni di 'fun' in 'xvect'
%  it        Iterazioni effettuate
%
err=1; 
it=0; 
xvect=[]; 
fx=[]; 
xdif=[];
while (it < nmax & err > toll)
    it=it+1;
    c=(a+b)/2;  
    xvect=[xvect;c]; 
    fx=[fx; fun(c)];      
    if (fun(c)*fun(a) > 0), 
       a=c; 
    else, 
       b=c; 
    end; 
    err=abs(b-a); 
    xdif=[xdif;err];
end; 
%
fprintf('\n bisezione:\n')
fprintf(' Numero di Iterazioni : %d \n',it);
fprintf(' Radice calcolata     : %12.8f \n',xvect(it));
%
return

