function [xv,step,nit] = newtonmod (f,f1,M,x0,toll,nmax)
% Uso:
%   function [xv,step,nit] = newtonmod (f,f1,M,x0,toll,nmax)
%
% Dati di ingresso:
% f: funzione
% f1: derivata di f
% M: numero reale
% x0:     prima 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
% step:  vettore contenente il valore assoluto della differenza di due
%        iterate successive
% nit: numero di iterazioni

%  lo script inizialmente, ponga xv(1)=x0
xv(1)=x0;

%  lo script contenga un ciclo-for con "n=1:nmax" che
for n=1:nmax
    
    %  assegni "fxv=f(xv(1))", "f1xv=f1(xv(1))";
    fxv=feval(f,xv(n));
    f1xv=feval(f1,xv(n));
    
    if fxv == 0
        % in caso affermativo esca per "return" dal ciclo for, ponendo
        % "step=NaN", "nit=NaN";
        step=0; nit=n; return;
    end
    
    
    %  verifichi se il valore di "f1xv" sia uguale a "0";
    if f1xv == 0
        % in caso affermativo esca per "return" dal ciclo for, ponendo
        % "step=NaN", "nit=NaN";
        step=NaN; nit=NaN; return;
    end
    
    % in caso non affermativo
    
    % ponga quale "xv(n+1)" il valore della $n$-sima iterazione del
    % metodo di "Newton Modificato"
    xv(n+1)=xv(n)-M*fxv/f1xv;
    
    %  ponga quale "step(n)" il valore assoluto della differenza delle
    %  due iterate "xv(n)", "xv(n+1)"
    step(n)=abs(xv(n+1)-xv(n));
    
    % se "step(n)" e' inferiore di "toll" esca per "return" dal ciclo
    % for, ponendo "nit" uguale a "n"
    if step(n) < toll
        nit=n; return;
    end
    
    
end

%  se si esce dal ciclo-for per un numero di iterazioni superiori a "nmax",
% scriva su monitor il messaggio di errore "sono state effettuate troppe
% iterazioni" e ponga "nit" uguale a "nmax+1";
fprintf('\n \t sono state effettuate troppe iterazioni \n \n');
nit=nmax+1;


