%
% funzione che calcola le differenze divise
% INPUT x vettore con le ascisse (dei punti di interpolazione)
%       y vettore con le odinate (dei punti di interpolazione)
%
% OUTPUT dd differenze divise, vedi referenza....
%
%
function dd = differenze_divise( x, y )
  % controllo dati:

  % 1 - controllo che siano vettori colonna
  if size(x,2) ~= 1 | size(y,2) ~=1
    error('x e y devono essere vettori colonna');
  end

  % 2 - controllo che abbiano la stessa dimensione
  if size(x,1) ~= size(y,1)
    error('x e y devono avere la stessa dimensione');
  end

  % numero di righe di x ed y
  n = size(x,1) ;

  % allocazione vettore dd, tramite copiatura del vettore y
  % dd ora contiene le differenze divise di ordine 0,
  % cio� dd(i)=f(x(i))=y(i)
  dd = y ;

  % loop differenze divise
  for k=1:n
    for j=n:-1:k+1
      if x(j) == x(j-k)
        error('le componenti di x devono essere tutte distinte') ;
      end
      dd(j) = (dd(j)-dd(j-1))/(x(j)-x(j-k)) ;
    end
  end

  % ora dd contiene le differenze divise
end
