function [ dfh, err_misto, h ] = rappincr( f,x,atol,rtol )
%
% input
%f funzione x valore  atol e rtol tolleranze per l'errore misto
%
% output
% dfh approssimazione della derivata prima di f(x) con il rapporto 
% incrementale o le differenze in avanti
% err_misto errore misto approssimato
% h valore di h utilizzato per calcolare dfh

h = 1;

dfh = ( f(x+h)-f(x) )/h;
dfh2 = ( f(x+h/2) - f(x) ) / (h/2) ;
err_misto = 2*abs( dfh - dfh2 ) / (atol + rtol*abs(dfh2) );

while (err_misto > 1 ) 
   h = h/2;
   dfh = dfh2;
   dfh2 = ( f(x+h/2) - f(x) ) / (h/2) ;
   err_misto_p=err_misto;
   err_misto = 2*abs( dfh - dfh2 ) / (atol + rtol*abs(dfh2) );
end


if (err_misto==0)
    err_misto=err_misto_p;
    warning('l''approssimazione non e'' accurata')
end
