close all
disp('funzione di Runge')
a=input('estremo sinistro= (-5) ') ;
b=input('estremo destro= (5) ') ;
x=a:0.2:b;  %vettore valori in cui plottare la funzione di Runge

n=input('quanti nodi? ') ;
nodi_eq=linspace(a,b,n) ;
nodi_cheb=zeros(1,n) ;

PM=(a+b)/2;
%nodi_cheb=(a+b)/2-((b-a)/2)*cos((0:n-1)*pi/(n-1)) ;
for i=1:n
    nodi_cheb(i)=PM-((b-a)/2)*cos((i-1)*pi/(n-1)) ;
end
disp(nodi_cheb)

fnodi_eq=1./(1+nodi_eq.^2) ;
fnodi_cheb=1./(1+nodi_cheb.^2) ; 

%CALCOLO POLINOMIO INTERPOLATORE
%con nodi equispaziati
pol_eq=polyfit(nodi_eq,fnodi_eq,n-1) ;
%con nodi di Chebyshev
pol_cheb=polyfit(nodi_cheb,fnodi_cheb,n-1) ;

% GRAFICI
figure
plot(x,polyval(pol_eq,x),'r--x')
hold on
plot(x,polyval(pol_cheb,x),'g--x','LineWidth',1.5)
f=1./(1+x.^2) ;
plot(x,f)
legend('nodi equispaz.','nodi cheb.','')
grid

% CALCOLO DEGLI ERRORI
err_eq=max(abs(f-polyval(pol_eq,x))) ;
err_cheb=max(abs(f-polyval(pol_cheb,x))) ;
disp('Errori: ') ;
disp(['equispaziati: ' num2str(err_eq) '   cheb:' num2str(err_cheb)])

%CALCOLO RETTA DI REGRESSIONE
rr=polyfit(nodi_eq,fnodi_eq,1) ;
figure
plot(x,polyval(rr,x),'r')
% PARABOLA APPROSSIMANTE
par=polyfit(nodi_eq,fnodi_eq,2) ;
hold on
plot(x,polyval(par,x),'g')
plot(nodi_eq,fnodi_eq,'x')
title('Retta di regressione e parabola appross.')



