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

Private GIT Repository
j
[cours-mesi.git] / tel / TPmatlab / integration / TP3c / simpson.m
1 function integ=simpson(h,y,ind_deb,ind_fin)\r
2 % calcule de façon simplifiée une intégrale en méthode de simpson\r
3 %\r
4 % variables d'entrée\r
5 % h est le demi-pas d'intégration au sens du cours;\r
6 % y est le vecteur des valeurs de la fonction à intégrer;\r
7 % ind_deb est l'indice de la borne basse de l'intervalle d'intégration;\r
8 % ind_fin est l'indice de la borne haute de l'intervalle d'intégration;\r
9 % Il est implicite que le nombre (ind_fin-ind_deb) est un entier pair\r
10 % c'est-à-dire que le nombre de points d'intégration est impair.\r
11 %\r
12 % variables de sortie\r
13 % integ est la valeur approchée par Simpson de l'intégrale cherchée\r
14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
15 %                       Fonctions connexes appelées\r
16 %\r
17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
18 \r
19 \r
20 % Tests d'entrée\r
21 if nargin~=4\r
22     error('Nombre de champs incorrect');\r
23 end\r
24 % controle de données\r
25 bool1=(h>0)*(mod(ind_fin-ind_deb,2)==0)*(ind_deb<ind_fin);\r
26 bool2=(floor(ind_deb)==ind_deb)*(floor(ind_fin)==ind_fin);\r
27 if (bool1*bool2==0)\r
28     error('Problème de paramètres. Voir controle de données');\r
29 end\r
30 format long e;\r
31 \r
32 % génération des coefficients de Simpson\r
33 lgr=ind_fin-ind_deb+1;\r
34 coef=2*ones(1,lgr-2);\r
35 impairs=1:2:lgr-2; % détermination des indices impairs dans coef\r
36 coef(impairs)=coef(impairs)+2;\r
37 coef=[1 coef 1]';\r
38 \r
39 % calcul de l'intégrale proprement dite\r
40 integ=h/3*y(ind_deb:ind_fin)*coef;\r