function Iapp=int_gauss_legendre(n,a,b,points,poids,fcn)

% int_gauss_legendre : calcul de l'intégrale par méthode de Gauss-Legendre à n+1 points
%
% *********************************************************
%
% Iapp=int_gauss_legendre(n,a,b,points,poids,fcn) : valeur approchée de l'intégrale
%   de la fonction fcn sur l'intervalle [a,b] avec la méthode de Gauss-Legendre
%   à n+1 points.
%       
%	variables d'entrées : 
%    *  n : entier naturel.
%    *  a,b : bornes de l'intervalle
%     * points : tableau de taille (q+1)*(q+1) (avec n<=q) tel que 
%                pour tout l dans {0,...,q}, 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)
%     * fcn est une chaîne de caractère représentant la fonction 
%                (de type inline, builtin ou par fichier M-file);
%	variables de sortie
%     * Iapp : valeur approchée de l'intégrale
% 
% 
% ************ Fonctions auxiliaires utilisées ************
%
%       aucune
%
% *********************************************************
%
%

% Contrôles d'entrée
% nombre d'arguments
if nargin~=6
   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 (a>=b)
   error('attention, a doit être plus petit que b');
end
[q1,q2]=size(points);
[q3,q4]=size(poids);
if (q1~=q2)
   error('attention, le troisième argument doit être une matrice carrée');
end
if (q3~=q4)
   error('attention, le quatrième argument doit être une matrice carrée');
end
if (q1~=q3)
   error('attention, le troisième et le quatrième argument doivent avoir la même taille');
end
if (n>q1-1) 
   error('attention, n est trop grand');
end

% Corps d'algorithme.
auxi=(b-a)/2;
Iapp=auxi*sum(feval(fcn,auxi*(points(n+1,1:n+1)+1)+a).*poids(n+1,1:n+1));
