function [xv, step, flag] = puntofisso (phi, x0, toll, maxit)

% Metodo di punto fisso, con criterio di arresto dello step.
%
% Dati di ingresso:
%   phi:    funzione di punto fisso (risolve x=phi(x)
%   x0:     valore iniziale
%   toll:   tolleranza richiesta per il modulo
%     della differenza di due iterate successive
%   maxit:   massimo numero di iterazioni permesse
%
% Dati di uscita:
%   xv:     vettore riga contenente le iterate
%   step: vettore riga contenente i moduli degli step
%   flag: 0 termina correttamente
%         1 eseguite piu' iter. di maxit.

% inizializzazione output
flag=0; step=toll+1; xv=x0;

n=1; 
while (step(end) >= toll) & (n < maxit) & (flag == 0)
        % calcolo nuova iterazione
        xv(n+1)=phi(xv(n));
        % calcolo valore assoluto step.
        step=[step abs(xv(end)-xv(end-1))];
        % aggiornamento indice di iterazione
        n=n+1;
end

if (step(end) >= toll) & (flag == 0)
    % siccome si esce dal while, e' falso l'asserto
    % (step(end) >= toll) & (n < maxit) & (flag == 0)
    % ma (step(end) >= toll) & (flag == 0) e' vero.
    % Necessariamente si esce per troppe iterazioni.
    flag=1;
end