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

Private GIT Repository
j
[cours-mesi.git] / tel / TPmatlab / integration / TP3a / int_fcn.m
1 function res=int_fcn(c,N,A,B,fcn,varargin)\r
2 \r
3 \r
4 %       int_fcn : calcul approché d'intégrale par méthode classique\r
5 %\r
6 % *********************************************************\r
7 %\r
8 %       res=int_fcn(c,N,A,B,fcn,varargin) renvoie la valeur approchée de l'intégrale\r
9 %    d'une fonction sur un intevalle par la méthodes des rectangles, des milieux,\r
10 %    des trapèzes ou de simpson.\r
11 %\r
12 %       variables d'entrées : \r
13 %     * c définit la méthode : \r
14 %            c=1 : méthode des rectangles,\r
15 %            c=2 : méthode des trapèzes,\r
16 %            c=3 : méthode des milieux,\r
17 %            c=4 : méthode de Simpson;\r
18 %     * N est le nombre de sous intervalles utilisés (correspondant à h=(B-A)/N)\r
19 %     * [A,B] est l'intervalle d'intégration\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 %     * varargin sont les arguments optionnels de la fonction.\r
23 %       attention, intégration par rapport à la première variable de f.\r
24 %\r
25 %       variables de sortie\r
26 %     * res est la valeur approchée de l'intégrale calculée.\r
27\r
28\r
29 % ************ Fonctions auxiliaires utilisées ************\r
30 %\r
31 %       aucune\r
32 %\r
33 % *********************************************************\r
34 %\r
35 \r
36 \r
37 \r
38 % Contrôles d'entrée\r
39 % nombre d'arguments\r
40 if (A>=B)\r
41    error('il faut A<B');\r
42 end\r
43 if (fix(N)~=N) | (N <1)\r
44    error('n doit être un entier naturel non nul');\r
45 end\r
46 if ~((c==1) | (c==2) | (c==3) | (c==4))\r
47    error('c doit être un entier égal à 1, 2, 3 ou 4');\r
48 end\r
49 qs=exist(fcn);\r
50 if (qs~=2) & (qs~=5) & (qs~=1)\r
51    error('fcn doit être le nom d''une fonction (built-in, M-file ou inline)');\r
52 end\r
53 \r
54 \r
55 h=(B-A)/N;\r
56 switch(c)\r
57 % calcul par la méthode des rectangles\r
58    case(1)\r
59       res=h*sum(feval(fcn,A:h:B-h,varargin{:}));\r
60 % calcul par la méthode des trapèzes (sans trapz)\r
61    case(2)\r
62       res=(h/2)*(feval(fcn,A,varargin{:})+feval(fcn,B,varargin{:})+...\r
63            2*sum(feval(fcn,A+h:h:B-h,varargin{:})));     \r
64 % calcul par la méthode du point milieu\r
65    case(3)\r
66       res=h*sum(feval(fcn,A+h/2:h:B-h/2,varargin{:}));\r
67 % calcul par la méthode de Simpson\r
68    case(4)\r
69       res=(h/6)*(feval(fcn,A,varargin{:})+feval(fcn,B,varargin{:})+...\r
70          2*sum(feval(fcn,A+h:h:B-h,varargin{:}))+...\r
71          4*sum(feval(fcn,A+h/2:h:B-h/2,varargin{:})));\r
72 end