Vous êtes sur la page 1sur 12

Informatique_algorithmique

Projet_1 Nicolas et
Bousquet

But : Effectuer algorithmiquement des calculs daires par plusieurs


mthodes (dites dun certain ordre) diffrentes :
- La mthode des escaliers (rectangle).
- La mthode du Point milieu.
- La mthode des Trapzes.
- La mthode de Simpson.
- La mthode des 3/8 de Newton.
- La mthode des Trapzes amliore.(Romberg)
Et interprtation des rsultats sur diffrentes courbes.

Plan : - p1-2 - Plan+Introduction.


- p2 - Mthode des Escaliers.
- p3 - Mthode du Point milieu
- p3-4 - Mthode des Trapzes
- p4-5 - Mthode Simpson.
- p5-6 - Mthode des 3/8 de Newton.
- p6-7 - Mthode des Trapzes amliors.
- p8-9 - Le menu.
- p9-10-11 - Discussions et interprtations.
- p11 - Conclusion.

Introduction :

Le but final est dapproximer des calculs daires par diffrentes


mthodes convergentes plus ou moins selon la mthode et la fonction
choisie : ce qui constituera le dernire partie du rapport.
Lintrt du calcul intgrale numrique rside dans le fait que pour
certaine fonction il est difficile de trouver une primitive pour un calcul
analytique ais et que dans la rcolte de donnes de problmes physiques
lon dispose, non pas dune fonction continue intgrer, mais un nuage
de point : passage au cas discret.
Pour les diffrentes mthodes nous disposons des formules
gnrales tablit partir de dmonstrations mathmatiques. Nous
gnralisons ensuite ces mthodes applicables un certain intervalle
un ensemble dintervalles de mme longueurs de pas h = (b - a) / N dont
le N est choisi par lutilisateur. Sur la figure suivante le pas est variable :
La subdivision nous donne :

Selon la mthode il faudra distinguer les N selon certains procds.


Le codage de lalgorithme du calcul de laire approche ce fera
principalement avec des boucles for. Lutilisateur devra rentrez les deux
bornes a et b (respectivement infrieure et suprieure) de lintervalle,
lentier N, et la fonction intgrer.
NB : algorithmes en matlab.

Les deux premires mthodes qui vont suivrent, mthode des


escalier (ou mthode des rectangles) et mthode du point milieu sont une
premire approche du calcul intgrale numrique.

Mthode des escaliers : (escalier.m)

Cette mthode consiste approche lintgrale de la fonction sur [a,b]


par une somme de surfaces de rectangles :

Le code correspondant est :

function z=escalier(a,b,N,A)
%--Calcul d'une aire approch par la methode des escaliers.
%--Input : les bornes a et b de l'intervalle, le decoupage de l'intervalle
% en N intervalles,et la fonction A.
%--Output : l'aire approche "inferieure" par la methode des escaliers.

%--Initialisation--
h=(b-a)/N;
z=0;
x=a;
%--Boucle--
for i=0:N-1
temp1=eval(A);
x=x+h;
temp2=eval(A);
if (temp1<temp2)
z=z+temp1*h;
else
z=z+temp2*h;
end
end

%--Affichage--
fprintf('L'' aire approchee (%d intervalles) avec methode des escaliers
est : %f \n',N,z);

Mthode du Point milieu : (pointmilieu.m)

La mthode du point milieu est dordre 2 c'est--dire quelle est


exacte pour tous les polynmes de degrs 0 et 1.
Laire approche de la fonction sur un intervalle [a,b] est donne par la
valeur de la fonction au point (a+b)/2, multipli par b-a.

Le code correspondant est :

function z=pointmilieu(a,b,N,A)
%--Calcul de l'aire approche par la mthode du point milieu.
%--Input : les bornes inf et sup de l'intervalle a,b
% le nombres d'intervalles N et la fonction A entre quotes.
% pointmilieu(a,b,N,A).
%--Output : l'aire approche de A sur [a,b] avec un decoupage de N
% intervalles.

%--Initialisation--
h=(b-a)/N;
z=0;
x=a;

%--Boucle--
for i=0:N-1
x=x+h/2;
z=z+h*eval(A);
x=x+h/2;
end
%----------

%--Affichage--
fprintf('L'' aire approchee (%d intervalles) avec methode du point milieu
est : %f \n',N,z);

Mthode des Trapzes : (trapeze.m)

La mthode des trapzes est aussi dordre 2. Elle est obtenue en


intgrant le polynme dinterpolation linaire qui interpole la fonction f
aux points a et b. Sur [a,b] la valeur approche de lintgrale est donne
par :

La formule mathmatique du calcul approxim de laire sur lintervalle


[a,b] subdivis en N intervalles est :

Le code correspondant est :

function z=trapeze(a,b,N,A,c)
%--Approximation de l'integrale d'une fonction par la mthode des
% trapzes.
%--Input : les bornes des l'intervale, le nombre de d'itration,
% et la fonction entre quotes. Le c booleen sert a differentes
% utilisations de la fonction : c=0 --> utilisation sans programme.m
% c=1 --> utilisation dans programme.m
%--Output : la valeur de l'intgrale approche sur cet interval.

%--Cas d'erreur :
if (c==0|c==1)
else
disp('Rentrez b valant 0 ou 1');
return;
end

%--Initialisation--
x=a;
z=eval(A);
x=b;
z=z+eval(A);

%--Boucle--
for i=1:N-1
x=a+i*(b-a)/N;
z=z+2*eval(A);
end
z=((b-a)/(2*N))*z;

%--Affichage ou non du resultat selon b--


if c==1
fprintf('L'' aire approchee (%d intervalles) avec methode des trapezes
est : %f \n',N,z);
end

Mthode de Simpson : (simpson.m)


On obtient la formule de Simpson si lon arrive passer une
parabole (polynme de degr 2) par trois points bien dtermins. Cest
une mthode dordre 4 car elle est exacte pour tous les polynmes de
degrs 0,1,2 et 3.

La formule mathmatique du calcul approxim de laire sur lintervalle


[a,b] est :

Avec une subdivision de lintervalle en N (N pair) intervalles la formule


devient :

Le code correspondant est :

function y=simpson(a,b,N,A)
%--Approximation de l'integrale d'une fonction 'A' par la mthode de
% Simpson sur l'intervalle a,b et pour N intervalles: simpson(a,b,N,A)--
%--Input : les bornes des l'intervale et le nombre de d'itration.
%--Output : la valeur de l'intgrale approche sur cet interval.

%--Cas d'erreur--
if N<=0
disp('Rentrez N pair et positif strictement');
return;
end
if (mod(N,2)==1)
N=input('Rentrez une valeur de N pair : ');
end

%--Initialisation--
x=a;
z=eval(A);
x=b;
z=z+eval(A);

%--Boucles--
for i=1:(N-2)/2
x=a+2*i*(b-a)/N;
z=z+2*eval(A);
end
for i=0:(N-2)/2
x=a+(2*i+1)*(b-a)/N;
z=z+4*eval(A);
end
z=((b-a)/(3*N))*z;

%--Affichage--
fprintf('L'' aire approchee (%d intervalles) avec methode de Simpson est :
%f \n',N,z);

Mthode des 3/8 de Newton : (newton38.m)

On obtient la formule de Newton 3,8 en faisant passer un polynme


de degrs 3 par 4 points quidistant de lintervalle en question. On doit
avoir N multiple de 3. Cette mthode est dordre 4.
La formule mathmatique du calcul approxim de laire sur lintervalle
[a,b] est donn par :

Le code correspondant une subdivision de lintervalle N en N intervalles


est :

function y=newton38(a,b,N,A)
%--Approximation de l'integrale d'une fonction 'A' par la mthode de
% 3/8 newton entre a et b pour N intervalles: newton38(a,b,N,A)--
%--Input : les bornes de l'intervalle a,b et le nombre de d'intervalle N.
%--Output : la valeur de l'intgrale approche sur cet intervalle.

%--Cas d'erreur--
if (mod(N,3)~=0)
N=input('Rentrez une valeur de N multiple de 3 : ');
end

%--Initialisation--
x=a;
z=eval(A);
x=b;
z=z+eval(A);

%--Boucles--
for i=1:((N-3)/3)
x=a+3*i*(b-a)/N;
z=z+2*eval(A);
end
for i=0:((N-3)/3)
x=a+(3*i+1)*(b-a)/N;
z=z+3*eval(A);
x=a+(3*i+2)*(b-a)/N;
z=z+3*eval(A);
end
z=(3*(b-a)/(8*N))*z;

%--Affichage--
fprintf('L'' aire approchee (%d intervalles) avec methode des 3/8 de Newton
est : %f \n',N,z);

Mthode des Trapzes amliors : (romberg.m)


Cette mthode se sert du calcul de laire approxime par la
mthode des trapzes selon les formules suivantes obtenues par
dveloppements limits.
Dans lalgorithme de rsolution on peut conomiser du temps de
calcul en utilisant la formule rcursive suivante pour le calcul des Tn,0 :

Avec n = N*2^k , k entier, la formule du Tn,m scrit :

On peut organiser les Tn,m selon le tableau suivant :

Le but est le calcul des Tp,p sur la diagonale. Lorsque p augmente,


le rsultat du calcul approch par Romberg est plus prcis. Le
programme qui suit demande chaque itration lutilisateur sil veut
continuer le calcul tout en lui indiquant lactuelle position de
convergence par laffichage dune donne : |eps1-eps2|.

Le code correspondant est :

function y=romberg(a,b,N,A)
%--Valeur approche d'une intgrale
%--Input : romberg(a,b,N,A) : a et b : bornes inf et sup.
% N : nombre d'iteration.
% A : la fonction integrer entre quotes.
%--Output : Valeur approche de l'integrale entre a et b.

%--Initialisation
h=(b-a)/N;
I=trapeze(a,b,N,A,0);
bool=1;

%--Calcul de T(2N,0) a mettre dans T(1)


T(1)=trapeze(a,b,2*N,A,0);
%--Calcul de T(2N,1) mettre dans T(2)--
T(2)=(4*T(1)-I)/3;
%--Ini des epsilons--
esp1=abs(I-T(2));
esp2=esp1;
%--Ini de k--
k=1;
fprintf('Aire approche par Romberg :\n');
%------------------

%--Boucle--
while ((bool==1)&(esp2<=esp1))
k=k+1;
temp1=T(1);
T(1)=trapeze(a,b,(2^k)*N,A,0);
for i=2:k
temp2=T(i);
T(i)=((4^i)*T(i-1)-temp1)/((4^i)-1);
temp1=temp2;
end
T(k+1)=((4^(k+1))*T(k)-temp1)/((4^(k+1))-1);
%--Echange de esp--
esp1=esp2;
esp2=abs(I-T(k+1));
fprintf('Iteration %d --> T(N = %d,k = %d) = %f \n',k-1,N,k,T(k+1));
fprintf('\tLa diffrence en valeur absolue eps1-eps2 : %f\n\t',abs(esp1-
esp2));
bool=input('Taper 1 pour continuer, autre arreter : ');
end
%---------
fprintf('L'' aire approchee avec methode de Romberg est T(N = %d,k = %d) =
%f \n',N,k,T(k+1));

Le menu : (programme.m)

Le menu permet de naviguer dune mthode de calcul daire une


autre facilitant la comparaison des prcisions des rsultats pour chaque
mthode. Au lancement de programme.m saffiche un menu comportant
quatres onglets : 2 exemples, lutilisation manuelle et le bouton Quitter.
En cliquant sur Utilisation manuelle, on demande dentrer les donnes
puis un menu affiche alors 8 onglets dfinis comme ci-dessous.

Le code source est :

%--Affiche le menu du projet 1.


%--Propose de traiter l'intgration numrique approche.

%--Initialisation--
w=0;
%------------------

%--Menu principal--
while w==0
k=menu('Que faire?','Exemple 1','Exemple 2','Utilisation
manuelle','Quitter');
switch k
case 1
disp('Exemple 1 : atan(1/x) entre 1 et pi pour N=12\n');
trapeze(1,pi,12,'atan(1/x)',1);
simpson(1,pi,12,'atan(1/x)');
newton38(1,pi,12,'atan(1/x)');
romberg(1,pi,12,'atan(1/x)');
case 2
disp('Exemple 2 : x^4-x entre -5 et 5 pour N=12\n');
trapeze(-5,5,12,'x^4-x',1);
simpson(-5,5,12,'x^4-x');
newton38(-5,5,12,'x^4-x');
romberg(-5,5,12,'x^4-x');
case 3
%--Remise a zero--
q=0;
%--Demande des donnes--
a=input('Rentrez la borne inferieure : ');
b=input('Rentrez la borne superieure : ');
N=input('Rentrez le nombre d''intervalles N : ');
A=input('Rentrez la fonction (ex : x^2) : ','s');

%--Sous-Menus--
while (q==0)
k=menu('Calcul d''une aire : quelle methode voulez vous
utiliser?','Rectangle','Point milieu','Trapeze','Simpson','3/8 de
Newton','Romberg (trapeze amelioree)','Tracer la courbe','Prcdent');
switch k
case 1
escalier(a,b,N,A);
case 2
pointmilieu(a,b,N,A);
case 3
trapeze(a,b,N,A,1);
case 4
simpson(a,b,N,A);
case 5
newton38(a,b,N,A);
case 6
romberg(a,b,N,A);
case 7
X=a:(b-a)/N:b;
x=a;
Y(1)=eval(A);
for i=2:N+1
x=x+(b-a)/N;
Y(i)=eval(A);
end
plot(X,Y,'-gx');
case 8
q=1;
end
end
%------------------
case 4
w=1;
q=1;
end
end

Discussions et interprtations :

I - La limite de la mthode des trapzes :


On sait que cette mthode est exacte dordre 2 mais pour certaines
fonctions elle sloigne de la ralit.

La mthode des trapzes a ces limites comme le montre la figure ci-


dessous :

La fonction intgrer a son importance : on a dj que si celle-ci oscille


trop rapidement pour un dcoupage de lintervalle insuffisant, lerreur
dapproximation peut devenir leve.
Pour pallier ce problme on va soit utiliser des approximations
quadratiques au lieu dapproximations linaires soit utiliser une forme
volue de la mthode des trapzes : Romberg.

1 Utilisation dapproximations quadratiques :

La mthode de Simpson :

On dispose de la mthode de Simpson. En comparaison avec ce qui


prcde voici la figure montrant que Simpson approxime mieux une
fonction oscillante (non periodique) que Trapze :
Bien sur, le fait dutiliser une forme composite du calcul daire
approxime, c'est--dire le dcoupage de lintervalle en N intervalles et
lapplication de la mthode tous ces sous intervalles, va augmenter la
prcision du calcul :

La mthode de Newton 3/8 :

Cette mthode est une amlioration de la mthode de Simpson. Elle


fait partie (tout comme Simpson) des mthodes de Newton-Cotes dordre
p. Elle est cependant un peut plus prcise que celle de Simpson pour N
intervalles donns.

2 - La mthode de Romberg :

Un calcul matlab sur la fonction cos(x) sur [0,2] peut permettre de


montrer que cette mthode approxime mieux que Trapze :

>> programme
Rentrez la borne inferieure : 0
Rentrez la borne superieure : 2
Rentrez le nombre d'intervalles N : 5
Rentrez la fonction (ex : x^2) : cos(x)
L' aire approchee (5 intervalles) avec methode des trapezes est :
0.897141
Aire approche par Romberg :
Iteration 1 --> T(N = 5,k = 2) = 0.908681
La diffrence en valeur absolue eps1-eps2 : 0.000624
Taper 1 pour continuer, autre arreter : 1
Iteration 2 --> T(N = 5,k = 3) = 0.909155
La diffrence en valeur absolue eps1-eps2 : 0.000473
Taper 1 pour continuer, autre arreter : 1
L' aire approchee avec methode de Romberg est T(N = 5,k = 3) =
0.909155

Sachant que la vrai valeur de lintgrale est sin(2) et vaut 0.909297


10^(-6) prs, Romberg approxime mieux que Trapze.

II Calcul de lerreur commise :


On prend un intervalle [a,b] que lon subdivise en N intervalles de
mme longueurs. En notant que lerreur commise sur le calcul de
lintgrale vaut la valeur exacte de lintgrale laquelle on soustrait le
calcul approch on obtient pour diffrentes valeurs de N
(1,2,4,8,16,32,,1024) un graphe de lerreur en fonction de N ou bien un
graphe de lerreur en fonction du temps de calcul (N et le temps de calcul
fe sont lis). Avec cos(x) valuer entre 0 et 2 voici le graphe :

(les trois courbes du bas sont celle obtenues avec Newton-Cotes dordres
suprieurs)

On note qu N fix les formules de Newton-Cotes sont plus adaptes que


Trapze ou Romberg.

Conclusion :

Parmi les diffrentes mthodes exposes on retiendra que


linterpolation quadratique est plus adapte au calcul de fonctions
grandes variations (ou qui oscille rapidement) que linterpolation linaire.
Le calcul de lerreur nous montre alors limportance dutiliser des
mthodes de calcul plus fines dans le but de raccourcir le temps de calcul
et damliorer la prcision voulue.

Vous aimerez peut-être aussi