format short e 
echo on
format short e 
echo on
clear e vetn
% estremi dell'intervallo
a = -1; b = 1;
pause
n = 1;
% costruiamo il polinomio di interpolazione di grado n 
% su nodi equidistanti per la funzione e^x
for i=1:5   
    n=2*n
    vetn(i) = n;
    if (i==1)
    pause
    end
    
% nodi di interpolazione
xnodi = linspace(a,b,n+1)';
fnodi = exp(xnodi);
if (i == 1),pause,end
% grafico dei nodi
figure(1)
hold off
plot(xnodi,fnodi,'*')
if (i==1),pause,end
xx = linspace(a,b,500);
yy = exp(xx);
if (i==1),pause,end
% grafico della funzione
hold on
plot(xx,yy,'b-')
if (i==1),pause,end
p = polyfit(xnodi,fnodi,n);
yp = polyval(p,xx);
if (i==1),pause,end
% grafico del polinomio interpolante
plot(xx,yp,'r-')
if (i==1),pause,end
%% errore  su 500 punti
e(i) = max(abs(yy-yp));
disp(e(i))
pause
  if (i >=1),echo off,end  
hold off
end
figure(2)
semilogy(vetn,e, '*-')
pause

echo on
format short e 
clear e vetn
% estremi dell'intervallo
a = -1; b = 1;
pause
n = 1;
% costruiamo il polinomio di interpolazione di Newton grado n 
% su nodi equidistanti per la funzione e^x
for i=1:5   
    n=2*n
    vetn(i) = n;
if (i==1),pause,end
% nodi di interpolazione
xnodi = linspace(a,b,n+1)';
fnodi = exp(xnodi);
if (i==1), pause,end
% grafico dei nodi
figure(1)
hold off
plot(xnodi,fnodi,'*')
if (i==1), pause,end
xx = linspace(a,b,500);
yy = exp(xx);
if (i==1),pause, end
% grafico della funzione
hold on
plot(xx,yy,'b-')
if (i==1),pause, end
yp = int_new(xnodi,fnodi,xx);
if (i==1),pause, end
% grafico del polinomio interpolante
plot(xx,yp,'r-')
if (i==1),pause, end
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
if (i>=1), echo off, end
hold off
end
figure(2)
semilogy(vetn,e,'*-')

echo on
%% cambiamo funzione usiamo la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo il polinomio di interpolazione di grado n 
% su nodi equidistanti per la funzione 1 / (1+x^2)
for i=1:5   
    n=2*n
    vetn(i) = n;
if (i==1),pause, end
% nodi di interpolazione
xnodi = linspace(a,b,n+1)';
fnodi = runge(xnodi);
if (i==1), pause, end
% grafico dei nodi
figure(1)
hold off
plot(xnodi,fnodi,'*')
if (i==1),pause, end
xx = linspace(a,b,500);
yy = runge(xx);
if (i==1),pause, end
% grafico della funzione
hold on
plot(xx,yy,'b-')
if (i==1), pause, end
p = polyfit(xnodi,fnodi,n);
yp = polyval(p,xx);
if (i==1), pause, end
% grafico del polinomio interpolante
plot(xx,yp,'r-')
if (i==1),pause, end
%% errore  su 500 punti
e(i) = max(abs(yy-yp));
disp(e(i))
pause
if (i>=1), echo off, end
hold off
end
figure(2)
semilogy(vetn,e,'*-')

pause

echo on
%% cambiamo funzione usiamo la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo il polinomio di interpolazione di grado n 
% su nodi Chebyshev per la funzione 1 / (1+x^2)
for i=1:6
    n=2*n
    vetn(i) = n;
if (i==1), pause, end
% nodi di interpolazione di Chebyshev
xnodi = (a+b)/2 + (b-a)/2*cos( (2*[0:n]'+1)*pi/(2*(n+1)) );
fnodi = runge(xnodi);
if (i==1), pause, end
% grafico dei nodi
figure(1)
hold off
plot(xnodi,fnodi,'*')
if (i==1), pause, end
xx = linspace(a,b,500);
yy = runge(xx);
if (i==1), pause, end
% grafico della funzione
hold on
plot(xx,yy,'b-')
if (i==1), pause, end
p = polyfit(xnodi,fnodi,n);
yp = polyval(p,xx);
if (i==1), pause, end
% grafico del polinomio interpolante
plot(xx,yp,'r-')
if (i==1), pause, end
%% errore  su 500 punti
e(i) = max(abs(yy-yp));
disp(e(i))
if (i>=1), echo off, end
hold off
end
figure(2)
semilogy(vetn,e,'*-')
pause
echo on
%% cambiamo funzione usiamo la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo il polinomio di interpolazione di Newton di grado n 
% su nodi Chebyshev per la funzione 1 / (1+x^2)
for i=1:6  
    n=2*n
    vetn(i) = n;
if (i==1), pause, end
% nodi di interpolazione di Chebyshev
xnodi = (a+b)/2 + (b-a)/2*cos( (2*[0:n]'+1)*pi/(2*(n+1)) );
fnodi = runge(xnodi);
if(i==1), pause, end
% grafico dei nodi
figure(1)
hold off
plot(xnodi,fnodi,'*')
if (i==1), pause, end
xx = linspace(a,b,500);
yy = runge(xx);
if (i==1),pause, end
% grafico della funzione
hold on
plot(xx,yy,'b-')
if (i==1), pause, end
yp = int_new(xnodi,fnodi,xx);

if (i==1),pause, end
% grafico del polinomio interpolante
plot(xx,yp,'r-')
if (i==1),pause, end
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
if (i>=1), echo off, end
hold off
end
figure(2)
semilogy(vetn,e,'*-')

pause
echo on 
%% la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo la spline lineare di interpolazione di grado n 
% su nodi equidistanti per la funzione 1 / (1+x^2)
for i=1:6  
    n=2*n
    vetn(i) = n;
if (i==1),pause, end
% nodi di interpolazione equidistanti
xnodi = linspace(a,b,n+1);
fnodi = runge(xnodi);
if (i==1), pause, end
% grafico dei nodi
figure(1)
hold off
plot(xnodi,fnodi,'*')
if (i==1), pause, end
xx = linspace(a,b,500);
yy = runge(xx);
if (i==1), pause, end
% grafico della funzione
hold on
plot(xx,yy,'b-')
if (i==1), pause, end
yp = interp1(xnodi,fnodi,xx);

if (i==1), pause, end
% grafico della spline lineare 
plot(xx,yp,'r-')
if (i==1), pause, end
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
if (i>=1), echo off, end
hold off
end
figure(2)
semilogy(vetn,e,'*-')

pause
echo on 
%% la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo la spline cubica di interpolazione di grado n 
% su nodi equidistanti per la funzione 1 / (1+25x^2)
for i=1:6  
    n=2*n
    vetn(i) = n;
if (i==1), pause, end
% nodi di interpolazione equidistanti
xnodi = linspace(a,b,n+1);
fnodi = runge(xnodi);
if (i==1), pause, end
% grafico dei nodi
figure(1)
hold off
plot(xnodi,fnodi,'*')
if (i==1), pause, end
xx = linspace(a,b,500);
yy = runge(xx);
if (i==1), pause, end
% grafico della funzione
hold on
plot(xx,yy,'b-')
if (i==1), pause, end
yp = spline(xnodi,fnodi,xx);

if (i==1), pause, end
% grafico della spline cubica 
plot(xx,yp,'r-')
if (i==1), pause, end
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
if (i>=1), echo off, end
hold off
end
figure(2)
semilogy(vetn,e,'*-')
