function res=verifie_diff_div(X,Y)	

% verifie_diff_div : verification pour le calcul du polynôme interpol. support quelconque
%
%
% *********************************************************
%
% res=verifie_diff_div(X,Y)	
%     vérification du calcul du polynôme d'interpolation défini par le nuage de point X,Y
%     pour support quelconque
%
%	variables d'entrées : 
%     * X : contient les valeurs x_i, pour 0 <=i<=n (dans l'ordre croissant)
%     * Y : contient les valeurs f^(r)(x_i), pour 0 <=i<=n, de telle sorte que :
%             si x_k est multiple avec x_{k-1}~=x_k=x_{k+1}=...=x_{k+r}~=x_{k+r+1} alors
%                y_k=f(x_k), y_{k+1}=f'(x_k), ..., y_{k+r}=f^(r)(x_k).
%
%	variables de sortie
%     * res : contient le maximum des valeur absolue de 
%               n-p où p est le degré du polynôme d'interpolation p_n
%                   et n+1 est le nombre de points.
%               maximum sur i dans {0,...,n} maximum sur l dans alpha_i-1
%               de la quantitée p_n^(l)(x_i)-f^(l)(x_i) (dérivée l fois) où alpha_i est 
%               le nombre d'éléments du n=1-uplet(x_0,...,x_n) égaux à x_i.
%
% Le calcul est correct si et seulement si res est nul.
%
%
% 
% ************ Fonctions auxiliaires utilisées ************
%
%     diff_div, newton_cano, val_derivee_multiple 
%
% *********************************************************

D=diff_div(X,Y);
P=newton_cano(D,X(1:end-1));
n=length(X)-1;
p=length(P)-1;
erdeg=abs(n-p);
er=0;
i=0;
while (i<=n)
   [alpha,valfder]=val_derivee_multiple(i,X,Y);
   Q=P;
   er=max(er,abs(polyval(P,X(i+1))-valfder(1)));
   for l=1:alpha-1
      Q=polyder(Q);
      er=max(er,abs(polyval(Q,X(i+1))-valfder(l+1)));   
   end
   i=i+alpha;
end
res=max(er,erdeg);
