
% nome:      cognome:            matricola:       postazione:

function [xv, fxv] = secanti (f, x0, x1, toll, nmax)

% Uso:
%   [xv, fxv] = secanti(f, x0, x1, toll, nmax)
%
% Dati di ingresso:
%   f:      funzione
%   x0:     prima iterata
%   x1:     seconda iterata
%   toll:   tolleranza richiesta per il valore assoluto
%           tra due iterate successive
%   nmax:   massimo numero di iterate permesse
%
% Dati di uscita:
%   xv:     vettore contenente le iterate
%   fxv:    ?vettore contenente i valori di f(xv)

% assegnazioni iniziali
xv(1)=x0; xv(2)=x1;
fxv(1)=feval(f,xv(1)); fxv(2)=feval(f,xv(2));

for n=2:nmax
    
    % uscita corretta
    if abs(xv(n)-xv(n-1)) <= toll
        return;
    end
    
    % uscita per errore
    if fxv(n) == fxv(n-1)
        fprintf('non si e'' potuto terminare il processo correttamente');
    end
    
    % iterazione metodo secanti
    m=(xv(n)-xv(n-1))/(fxv(n)-fxv(n-1));
    xv(n+1)=xv(n)-m*fxv(n);
    fxv(n+1)=feval(f,xv(n+1));
end

% uscita per errore
fprintf('non si e'' potuto terminare il processo correttamente');
