% Nodi di Interpolazione di Lagrange
clear
N=input('Numero di nodi: ') ;
nodi=linspace(-5,5,N) ;
y=1./(1+nodi.^2) ;
n=length(nodi)-1 ;

% Nodi di Chebychev-Gauss-Lobatto in [a,b]
a=-5 ;    % o inseriti da tastiera
b= 5 ;    %  "" "" 
nodiCh=zeros(1,N) ;
for i=0:n
    nodiCh(i+1)=(a+b)/2-cos(pi*i/n)*((b-a)/2) ;
end
disp(nodiCh)
yCh=1./(1+nodiCh.^2) ;

sceltanodi=input('Quali nodi vuoi usare? E=equispaziati, C=Cheb ','s') ;
if strcmp(sceltanodi,'E')
% Usare: polyfit, polyval
% p contiene i coefficienti del polinomio 
% interpolatore
    p=polyfit(nodi,y,n) ;
elseif strcmp(sceltanodi,'C')
    p=polyfit(nodiCh,yCh,n) ;
else
    return
end
M=input('Numero di punti per il grafico: ') ;
xplot=linspace(-5,5,M) ;
ypol=polyval(p,xplot) ;
frunge=1./(1+xplot.^2) ;
figure
% Grafico del polinomio interpolatore
title('Funzione di Runge')
plot(xplot,ypol,'r')
hold on
% Grafico della funzione di Runge 
plot(xplot,frunge)
if strcmp(sceltanodi,'E')
    plot(nodi,y,'mx','LineWidth',2)  % plot dei valori nei nodi
else
    plot(nodiCh,yCh,'mx','LineWidth',2)
end
grid
legend('Polinomio Interp.','Funzione di Runge','Nodi')
% Calcolo dell'errore in norma infinito
e=frunge-ypol ;   % vettore degli errori
errore=norm((e),inf) ;
disp(errore)