
function esempio1

% DALL'ANALISI, SI HA 
% 1. REGOLA DEI SEGNI CARTESIO: 1 ZERO POSITIVO.
% 2. APPLICANDOLA A f(-x), 1 ZERO NEGATIVO E 4 COMPLESSI.
% 3. LE RADICI REALI VIVONO IN [-2,2].

f=@(x) x.^6-x-1;
xx=linspace(-2,2,1000);
yy=feval(f,xx);
plot(xx,yy,'-');

fprintf('\n \t PAUSA')

pause;

% UTILIZZANDO LA LENTE DEL MATLAB SI VEDE CHE VIVE IN (1,1.4) ED E'
% PROSSIMO A 1.2.
x0=1;
x1=1.4;

toll=10^(-8);
nmax=100;

[xv, fxv, n] = metodo (f, x0, x1, toll, nmax);

semilogy((1:n)',fxv);

fprintf('\n \t Valore approssimato della radice: %1.15e \n',xv(end));


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

%METODO Metodo iterativo per equazione non lineare
%
% [xv, fxv, n] = metodo(f, x0, x1, toll, nmax)
%
% Dati di ingresso:
%   f:      funzione (inline function)
%   x0:     prima iterata iniziale
%   x1:     seconda iterata iniziale
%   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 corrispondenti residui
%   n:      numero di iterate della successione

xv=[x0;x1];
fxv=[feval(f,x0); feval(f,x1)];

ii=1;

while ii <= nmax
    x0=xv(end-1);
    x1=xv(end);
    
    fx0=fxv(end-1);
    fx1=fxv(end);
    
    xnew=x1-fx1*(x1-x0)/(fx1-fx0);
    xv=[xv; xnew];
    fxv=[fxv; feval(f,xnew)];
    
    if abs(xnew -x1) <= toll
        n=length(xv);
        ii=nmax+1;
    else
        ii=ii+1;
    end
    
end

fxv=abs(fxv);
