]> AND Private Git Repository - cours-mesi.git/blob - tel/TPmatlab/integration/TP3b/int_gauss_legendre.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
init
[cours-mesi.git] / tel / TPmatlab / integration / TP3b / int_gauss_legendre.m
1 function Iapp=int_gauss_legendre(n,a,b,points,poids,fcn)\r
2 \r
3 % int_gauss_legendre : calcul de l'intégrale par méthode de Gauss-Legendre à n+1 points\r
4 %\r
5 % *********************************************************\r
6 %\r
7 % Iapp=int_gauss_legendre(n,a,b,points,poids,fcn) : valeur approchée de l'intégrale\r
8 %   de la fonction fcn sur l'intervalle [a,b] avec la méthode de Gauss-Legendre\r
9 %   à n+1 points.\r
10 %       \r
11 %       variables d'entrées : \r
12 %    *  n : entier naturel.\r
13 %    *  a,b : bornes de l'intervalle\r
14 %     * points : tableau de taille (q+1)*(q+1) (avec n<=q) tel que \r
15 %                pour tout l dans {0,...,q}, points(l+1,1:l+1) contient\r
16 %                les l+1 points x_i de la formule (à l+1 points)\r
17 %     * poids  : tableau de taille (n+1)*(n+1) tel que \r
18 %                pour tout l dans {0,...,n}, poids(l+1,1:l+1) contient\r
19 %                les l+1 poids D_i de la formule (à l+1 points)\r
20 %     * fcn est une chaîne de caractère représentant la fonction \r
21 %                (de type inline, builtin ou par fichier M-file);\r
22 %       variables de sortie\r
23 %     * Iapp : valeur approchée de l'intégrale\r
24\r
25\r
26 % ************ Fonctions auxiliaires utilisées ************\r
27 %\r
28 %       aucune\r
29 %\r
30 % *********************************************************\r
31 %\r
32 %\r
33 \r
34 % Contrôles d'entrée\r
35 % nombre d'arguments\r
36 if nargin~=6\r
37    error('nombre d''arguments de la fonction incorrect');\r
38 end\r
39 % autres tests éventuels \r
40 if (fix(n)~=n) | (n<0)\r
41    error('l''entier n doit être un entier naturel');\r
42 end\r
43 if (a>=b)\r
44    error('attention, a doit être plus petit que b');\r
45 end\r
46 [q1,q2]=size(points);\r
47 [q3,q4]=size(poids);\r
48 if (q1~=q2)\r
49    error('attention, le troisième argument doit être une matrice carrée');\r
50 end\r
51 if (q3~=q4)\r
52    error('attention, le quatrième argument doit être une matrice carrée');\r
53 end\r
54 if (q1~=q3)\r
55    error('attention, le troisième et le quatrième argument doivent avoir la même taille');\r
56 end\r
57 if (n>q1-1) \r
58    error('attention, n est trop grand');\r
59 end\r
60 \r
61 % Corps d'algorithme.\r
62 auxi=(b-a)/2;\r
63 Iapp=auxi*sum(feval(fcn,auxi*(points(n+1,1:n+1)+1)+a).*poids(n+1,1:n+1));\r