function P=calcul_poly_gauss(c,n)

%	calcul_poly_gauss : calcul des polynômes othogonaux de Gauss
%
% *********************************************************
%
% P=calcul_poly_gauss(c,n) renvoie les polynômes de Gauss P_0,P_1,...,P_n
%   pour les quatre méthodes génériques (Legendre, Tchebytchev, Hermite 
%   et Laguerre.
%
%	variables d'entrées : 
%    *  n : entier naturel.
%     * c définit la méthode : 
%            c=1 : Gauss-Legendre,
%            c=2 : Gauss-Tchebytchev,
%            c=3 : Gauss-Hermite,
%            c=4 : Gauss-Laguerre.
%	variables de sortie
%     * P : tableau de taille (n+1)*(n+1) tel que 
%           pour tout i dans {1,...,n+1}, P(i,1:i) contient
%           le polynôme P_{i-1} (coefficient dominant en tête)
% 
% 
% ************ Fonctions auxiliaires utilisées ************
%
%       aucune
%
% *********************************************************
%




% 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.
P=zeros(n+1,n+1);
if (c~=2)
   P(1,1)=1;
   Lb=[];
   La=[1];
   for k=0:n-1
      switch(c)
         case 1
            auxi0=1/(k+1);
            auxi1=(2*k+1)*auxi0;
            auxi2=-k*auxi0;
            Lc=[auxi1*La 0]+[0 0 auxi2*Lb];
         case 3
            Lc=[2*La 0]-[0 0 2*k*Lb];
         case 4
            auxi0=1/(k+1);
            auxi1=(2*k+1)*auxi0;
            auxi2=-k*auxi0;
            Lc=[-auxi0*La 0]+[0 auxi1*La]+[0 0 auxi2*Lb];             
      end
      Lb=La;
      La=Lc;
      P(k+2,1:k+2)=Lc;    
   end
else
   P(1,1)=1;
   if (n>=1)
      P(2,1:2)=[1 0];
      Lb=1;
      La=[1 0];
      for k=1:n-1      
         Lc=[2*La 0]-[0 0 Lb];
         Lb=La;
         La=Lc;
         P(k+2,1:k+2)=Lc;    
      end
   end
end
