function [xv, fxv, n, flag] = secantfun (f, x0, x1, toll, nmax)
%NEWTONFUN Metodo delle secanti
%
% [xv, fxv, n, flag] = secantfun (f, x0, x1, toll, nmax)
%
% Dati di ingresso:
% f: funzione
% x0, x1: valori iniziali
% toll: tolleranza richiesta per il valore assoluto
% della differenza di due iterate successive
% nmax: massimo numero di iterazioni permesse
%
% Dati di uscita:
% xv: vettore contenente le iterate
% fxv: vettore contenente i corrispondenti residui
% n: numero di iterazioni effettuate
% flag: Se flag = 1 il rapporto incrementale si e' annullato
% in un'iterata

n = -1; % Inizializza il contatore n
flag = 0; % inizializza la variabile di seggnalazione
diff = toll+1; % Inizializza diff ad un valore fittizio > toll
% per poter entrare nel ciclo while iterativo
% Inizializza i vettori xv e fxv
xv = [x0; x1];
fxv = [feval(f,x0); feval(f,x1)];
% Ciclo iterativo del metodo
while (diff >= toll) && (n < nmax) && (flag ==0) % TEST DI ARRESTO
    f1x = (fxv(end)-fxv(end-1))/(xv(end)-xv(end-1)); % Calcola il rapp.incr.
    if f1x == 0
        flag = 1;
    else
        diff=-fxv(end)/f1x;
        x=xv(end)+diff;
        fx = feval(f,x); % Calcola il valore f(x_n)
        xv = [xv; x]; % aggiunge al vettore la nuova iterata
        fxv = [fxv; fx]; % aggiunge al vettore il nuovo residuo
        diff = abs(diff); % Calcola il valore |x_{n+1}-x_n|
        n = n+1; % incrementa il contatore delle iterate
    end
end