
function [I,flag] = integrale_adattativo (f,a,b,toll)
% Formula dei trapezi composta
%
% I = integrale_adattativo (f,a,b,toll);
%
% Dati di ingresso:
%  f: funzione integranda
%  a: estremo sinistro dell'intervallo di integrazione
%  b: estremo destro dell'intervallo di integrazione
%  toll: tolleranza richiesta dall'utente
% Dati di uscita:
%  I: approssimazione dell'integrale definito
% flag: 0: il processo e' terminato fornendo l'integrale entro la tolleranza richiesta, 
%   1: il processo e' terminato non fornendo l'integrale entro la tolleranza richiesta.

flag=1;
k=1;
I(k)=integrale_trapezi_composta (f,a,b,16);

while k < 9
    k=k+1;
    m=2^(k+3); % elementi suddivisione
    I(k)=integrale_trapezi_composta (f,a,b,m); % integrale approssimato
    err=abs(I(k)-I(k-1)); % errore assoluto previsto
    if err < toll % uscita in caso di successo
        I=I(k);
        flag=0;
        return;
    end
end


