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

% points_poids_gauss_symb : calcul des poids et des points de Gauss (symbolique)
% 
% *********************************************************
%
% [points,poids]=points_poids_gauss_symb(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,
%       en symbolique 
%
%	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)
%
%   Pour ces deux tableau, évaluation numérique (augmenter le nombre
%   de chiffre avec la fonction digits) ou formelle si possible.
%   méthode : points : recherche de zéro,
%              poids : utilisation des formules du cours (dérivée) 
%
%
% ************ Fonctions auxiliaires utilisées ************
%
%  calcul_poly_gauss_symb, polyval_symb, polyder_symb
%
% *********************************************************

% 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

% Corps d'algorithme.
poids=zeros(n+1,n+1);
points=zeros(n+1,n+1);
poids=sym(poids);
points=sym(points);
spi=sym(pi);
if (c~=2) 
   L=calcul_poly_gauss_symb(c,n+1);
   if ((1<=c) & (c<=3))
      points(1,1:1)=0;
   else
      points(1,1)=1;
   end
   switch c
      case 1
         poids(1,1)=2;
      case 3
         poids(1,1)=sqrt(spi);
      case 4
         poids(1,1)=1;
   end
   if (c==3)
      auxis=sym(4)*sqrt(spi);
   end
   syms x;
   for k=1:n
      sk=sym(k);
      C=polyval_symb(L(k+2,1:k+2),x);
      E=solve(C);
      points(k+1,1:k+1)=E;   
      switch c
         case 1
            Pp=polyder_symb(L(k+2,1:k+2));
            for j=1:k+1
               poids(k+1,j)=2./((sk+1)*polyval_symb(Pp,E(j)).*polyval_symb(L(k+1,1:k+1),E(j)));
            end
         case 3
            Pp=polyder_symb(L(k+2,1:k+2));
            auxis=2*auxis*(sk+1);
            for j=1:k+1
               poids(k+1,j)=auxis/(polyval_symb(Pp,E(j)))^2;
            end
         case 4
            Pp=polyder_symb(L(k+2,1:k+2));
            for j=1:k+1
               poids(k+1,j)=1/(E(j)*(polyval_symb(Pp,E(j)))^2);
            end
      end
   end
else
   for k=0:n
      sk=sym(k);
      points(1+k,1:1+k)=cos(((2*sym(0:k))+1)/(sk+1)*spi/2);
      poids(1+k,1:1+k)=spi/(sk+1)*ones(1,k+1);
   end
end

