function [points,poids]=points_poids_gauss(c,n)


% points_poids_gauss : calcul des poids et des points de Gauss
% 
% *********************************************************
%
% [points,poids]=points_poids_gauss(c,n) renvoie les points D_i et les points x_i
%  		  des formules d'intégration à l+1 points pour 0<=l<=n, pour 
%         l'une des quatre méthodes : Legendre, Tchebytchev, Hermite ou Laguerre.
%
%	variables d'entrées : 
%    *  n : entier naturel.
%     * c définit la méthode : 
%            c=1 : méthode de Gauss-Legendre,
%            c=2 : méthode de Gauss-Tchebychev,
%            c=3 : méthode de Gauss-Hermite,
%            c=4 : méthode de Gauss-Laguerre;
%
%	variables de sortie
%     * points : tableau de taille (n+1)*(n+1) tel que 
%                pour tout l dans {0,...,n}, points(l+1,1:l+1) contient
%                les l+1 points x_i de la formule (à l+1 points)
%     * poids  : tableau de taille (n+1)*(n+1) tel que 
%                pour tout l dans {0,...,n}, poids(l+1,1:l+1) contient
%                les l+1 poids D_i de la formule (à l+1 points)
%
%
% ************ Fonctions auxiliaires utilisées ************
%
%  calcul_poly_gauss
%
% *********************************************************


% Contrôles d'entrée
% nombre d'arguments
if nargin~=2
   error('nombre d''arguments de la fonction incorrect');
end
% autres tests éventuels 
if (fix(n)~=n) | (n<0)
   error('l''entier n doit être un entier naturel');
end
if ~((c==1) | (c==2) | (c==3) | (c==4))
   error('c doit être un entier égal à 1, 2, 3 ou 4');
end

% Corps d'algorithme.
poids=zeros(n+1,n+1);
points=zeros(n+1,n+1);
if (c~=2) 
   P=calcul_poly_gauss(c,n+1);
   for k=0:n
      C=(sort(roots(P(k+2,1:k+2))))';
      [points(k+1,1:k+1),ind]=sort(C);   
      switch c
         case 1
            auxipoids=2./((k+1)*polyval(polyder(P(k+2,1:k+2)),C).*polyval(P(k+1,1:k+1),C));
         case 3
            auxipoids=(2^(k+2)*sqrt(pi)*factorial(k+1))./((polyval(polyder(P(k+2,1:k+2)),C)).^2);
         case 4
            auxipoids=1./(C.*(polyval(polyder(P(k+2,1:k+2)),C)).^2);
      end
      poids(k+1,1:k+1)=auxipoids(ind);      
   end
else
   for k=0:n
      points(k+1,1:k+1)=cos(((2*(0:k)+1)/(k+1))*pi/2);   
      poids(k+1,1:k+1)=(pi/(k+1))*ones(1,k+1);
   end
end
