%
% Codici MATLAB per il corso di Calcolo Numerico 2007/2008
% Esercitazione n.4 (Enrico Bertolazzi)
%
% Esercizio proposto dal prof. Ana Alonso
%
function alonso( N, a, b, fun )
  
  % nodi di interpolazione equispaziati
  xequ = [a:(b-a)/N:b] ;

  % nodi di interpolazione di Chebichev
  xcheb = (a+b)/2 + ((b-a)/2) * cheb(N) ;

  % polinomio interpolante con nodi equispaziati
  pequ  = polyfit( xequ, feval( fun, xequ), N ) ;

  % polinomio interpolante con nodi di Chebichev 
  pcheb  = polyfit( xcheb, feval( fun, xcheb), N ) ;

  % Primitiva del polinomio interpolante con nodi equispaziati
  Ipequ = polyint( pequ ) ;

  % Primitiva del polinomio interpolante con nodi di Chebichev
  Ipcheb = polyint( pcheb ) ;
  
  % calcolo integrale del polinomio pequ nell'intervallo [a,b]
  Iequ = polyval( Ipequ, b) - polyval( Ipequ, a) ;

  % calcolo integrale del polinomio pcheb nell'intervallo [a,b]
  Icheb = polyval( Ipcheb, b) - polyval( Ipcheb, a) ;

  % calcolo integrale della funzione fun con il comando quad
  Iquad = quad( fun, a, b ) ;
  
  % stampa dei risultati
  disp( sprintf( 'Integrale con nodi equispaziati    %f', Iequ) ) ;
  disp( sprintf( 'Integrale con nodi di Chebyshev    %f', Icheb) ) ;
  disp( sprintf( 'Integrale con funzione MATLAB quad %f', Iquad) ) ;
  disp( sprintf( 'Errore con nodi equispaziati       %f', Iequ-Iquad) ) ;
  disp( sprintf( 'Errore con nodi di Chebyshev       %f', Icheb-Iquad) ) ;

end

% nodi di Chebyshev nell'intervallo [-1,1]
function x = cheb( n )
  x = cos( [0:1/n:1] .* pi ) ;
end

