function Z=poly_lagrange(i,T,X)

% poly_lagrange : calcul du i-ième polynôme de Lagrange en T (vectoriel)
%
% *********************************************************
%
%  z=poly_lagrange_sca(i,T,X)
%     Calcul de l_i(t) défini par 
%          l_i(T)=((T-x_0)/(x_i-x_0))...((T-x_(i-1))/(x_i-x_(i-1)))
%                   ((T-x_(i+1))/(x_i-x_(i+1)))...
%                         ((T-x_n)/(x_i-x_n))
%
%	variables d'entrées : 
%     * i : contient l'indice i, compris entre 0 et n
%     * T : contient le tableau ligne des réels où on évalue l_i
%     * X : contient les centres x_i, pour 0<=i<=n (deux à deux distincts)
%
%	variables de sortie
%     * Z : contient l'image du tableau T par l_i (tableau ligne)
% 
% 
% ************ Fonctions auxiliaires utilisées ************
%
%       aucune
%
% *********************************************************
%


% Contrôles d'entrée
%
% nombre d'arguments
if nargin~=3
   error('nombre d''arguments de la fonction incorrect');
end
n=length(X)-1;
if (i<0) | (i>n)
   error('i n''appartient pas à l''ensemble {0,...,n}')
end
% vérification des éléments du support deux à deux disjoints 
Z=sort(X);
if min(diff(Z))==0
   error('deux points du support sont égaux');
end

% Corps d'algorithme
q=length(T);
y=X(1:i);
y(i+1:n)=X(i+2:n+1);
Auxi=X(i+1)-X(1:i);
Auxi(i+1:n)=X(i+1)-X(i+2:n+1);
B=ones(n,1)*T-y'*ones(1,q);
Z=prod(((1./Auxi)'*ones(1,q)).*B,1);
