Rapport

Transcription

Rapport
Informatique_algorithmique
Projet_1
Bousquet
Nicolas et
But : Effectuer algorithmiquement des calculs d’aires par plusieurs
méthodes (dites d’un certain ordre) différentes :
- La méthode des escaliers (rectangle).
- La méthode du Point milieu.
- La méthode des Trapèzes.
- La méthode de Simpson.
- La méthode des 3/8 de Newton.
- La méthode des Trapèzes améliorée.(Romberg)
Et interprétation des résultats sur différentes courbes.
Plan : - p1-2 - Plan+Introduction.
- p2 - Méthode des Escaliers.
- p3 - Méthode du Point milieu
- p3-4 - Méthode des Trapèzes
- p4-5 - Méthode Simpson.
- p5-6 - Méthode des 3/8 de Newton.
- p6-7 - Méthode des Trapèzes améliorés.
- p8-9 - Le menu.
- p9-10-11 - Discussions et interprétations.
- p11 - Conclusion.
Introduction :
Le but final est d’approximer des calculs d’aires par différentes
méthodes convergentes plus ou moins selon la méthode et la fonction
choisie : ce qui constituera le dernière partie du rapport.
L’intérêt du calcul intégrale numérique réside dans le fait que pour
certaine fonction il est difficile de trouver une primitive pour un calcul
analytique aisé et que dans la récolte de données de problèmes physiques
l’on dispose, non pas d’une fonction continue à intégrer, mais un nuage
de point : passage au cas discret.
Pour les différentes méthodes nous disposons des formules
générales établit à partir de démonstrations mathématiques. Nous
généralisons ensuite ces méthodes applicables à un certain intervalle à
un ensemble d’intervalles de même longueurs de pas h = (b - a) / N dont
le N est choisi par l’utilisateur. Sur la figure suivante le pas est variable :
La subdivision nous donne :
Selon la méthode il faudra distinguer les N selon certains procédés.
Le codage de l’algorithme du calcul de l’aire approchée ce fera
principalement avec des boucles for. L’utilisateur devra rentrez les deux
bornes a et b (respectivement inférieure et supérieure) de l’intervalle,
l’entier N, et la fonction à intégrer.
NB : algorithmes en matlab.
Les deux premières méthodes qui vont suivrent, méthode des
escalier (ou méthode des rectangles) et méthode du point milieu sont une
première approche du calcul intégrale numérique.
Méthode des escaliers : (escalier.m)
Cette méthode consiste à approchée l’intégrale 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 approchée "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);
Méthode du Point milieu : (pointmilieu.m)
La méthode du point milieu est d’ordre 2 c'est-à-dire qu’elle est
exacte pour tous les polynômes de degrés 0 et 1.
L’aire approchée de la fonction sur un intervalle [a,b] est donnée 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 approchée par la méthode 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 approchée 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);
Méthode des Trapèzes : (trapeze.m)
La méthode des trapèzes est aussi d’ordre 2. Elle est obtenue en
intégrant le polynôme d’interpolation linéaire qui interpole la fonction f
aux points a et b. Sur [a,b] la valeur approchée de l’intégrale est donnée
par :
La formule mathématique du calcul approximé de l’aire sur l’intervalle
[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 méthode des
% trapèzes.
%--Input : les bornes des l'intervale, le nombre de d'itération,
% 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'intégrale approchée 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
Méthode de Simpson : (simpson.m)
On obtient la formule de Simpson si l’on arrive à passer une
parabole (polynôme de degré 2) par trois points bien déterminés. C’est
une méthode d’ordre 4 car elle est exacte pour tous les polynômes de
degrés 0,1,2 et 3.
La formule mathématique du calcul approximé de l’aire sur l’intervalle
[a,b] est :
Avec une subdivision de l’intervalle 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 méthode 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'itération.
%--Output : la valeur de l'intégrale approchée 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);
Méthode des 3/8 de Newton : (newton38.m)
On obtient la formule de Newton 3,8 en faisant passer un polynôme
de degrés 3 par 4 points équidistant de l’intervalle en question. On doit
avoir N multiple de 3. Cette méthode est d’ordre 4.
La formule mathématique du calcul approximé de l’aire sur l’intervalle
[a,b] est donné par :
Le code correspondant à une subdivision de l’intervalle N en N intervalles
est :
function y=newton38(a,b,N,A)
%--Approximation de l'integrale d'une fonction 'A' par la méthode 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'intégrale approchée 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);
Méthode des Trapèzes améliorés : (romberg.m)
Cette méthode se sert du calcul de l’aire approximée par la
méthode des trapèzes selon les formules suivantes obtenues par
développements limités.
Dans l’algorithme de résolution on peut économiser du temps de
calcul en utilisant la formule récursive suivante pour le calcul des Tn,0 :
Avec n = N*2^k , k entier, la formule du Tn,m s’écrit :
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 résultat du calcul approché par Romberg est plus précis. Le
programme qui suit demande à chaque itération à l’utilisateur s’il veut
continuer le calcul tout en lui indiquant l’actuelle position de
convergence par l’affichage d’une donnée : |eps1-eps2|.
Le code correspondant est :
function y=romberg(a,b,N,A)
%--Valeur approchée d'une intégrale
%--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 approchée 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 approchée 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 différence en valeur absolue eps1-eps2 : %f\n\t',abs(esp1esp2));
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 d’une méthode de calcul d’aire à une
autre facilitant la comparaison des précisions des résultats pour chaque
méthode. Au lancement de programme.m s’affiche un menu comportant
quatres onglets : 2 exemples, l’utilisation manuelle et le bouton Quitter.
En cliquant sur Utilisation manuelle, on demande d’entrer les données
puis un menu affiche alors 8 onglets définis comme ci-dessous.
Le code source est :
%--Affiche le menu du projet 1.
%--Propose de traiter l'intégration numérique approchée.
%--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 données-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','Précédent');
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 interprétations :
I - La limite de la méthode des trapèzes :
On sait que cette méthode est exacte d’ordre 2 mais pour certaines
fonctions elle s’éloigne de la réalité.
La méthode des trapèzes a ces limites comme le montre la figure cidessous :
La fonction à intégrer a son importance : on a déjà que si celle-ci oscille
trop rapidement pour un découpage de l’intervalle insuffisant, l’erreur
d’approximation peut devenir élevée.
Pour pallier à ce problème on va soit utiliser des approximations
quadratiques au lieu d’approximations linéaires soit utiliser une forme
évoluée de la méthode des trapèzes : Romberg.
1 – Utilisation d’approximations quadratiques :
La méthode de Simpson :
On dispose de la méthode de Simpson. En comparaison avec ce qui
précède voici la figure montrant que Simpson approxime mieux une
fonction oscillante (non periodique) que Trapèze :
Bien sur, le fait d’utiliser une forme composite du calcul d’aire
approximée, c'est-à-dire le découpage de l’intervalle en N intervalles et
l’application de la méthode à tous ces sous intervalles, va augmenter la
précision du calcul :
La méthode de Newton 3/8 :
Cette méthode est une amélioration de la méthode de Simpson. Elle
fait partie (tout comme Simpson) des méthodes de Newton-Cotes d’ordre
p. Elle est cependant un peut plus précise que celle de Simpson pour N
intervalles donnés.
2 - La méthode de Romberg :
Un calcul matlab sur la fonction cos(x) sur [0,2] peut permettre de
montrer que cette méthode approxime mieux que Trapèze :
>> 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 approchée par Romberg :
Iteration 1 --> T(N = 5,k = 2) = 0.908681
La différence en valeur absolue eps1-eps2 : 0.000624
Taper 1 pour continuer, autre arreter : 1
Iteration 2 --> T(N = 5,k = 3) = 0.909155
La différence 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 l’intégrale est sin(2) et vaut 0.909297 à
10^(-6) près, Romberg approxime mieux que Trapèze.
II – Calcul de l’erreur commise :
On prend un intervalle [a,b] que l’on subdivise en N intervalles de
même longueurs. En notant que l’erreur commise sur le calcul de
l’intégrale vaut la valeur exacte de l’intégrale à laquelle on soustrait le
calcul approché on obtient pour différentes valeurs de N
(1,2,4,8,16,32,…,1024) un graphe de l’erreur en fonction de N ou bien un
graphe de l’erreur en fonction du temps de calcul (N et le temps de calcul
fe sont liés). Avec cos(x) à évaluer entre 0 et 2 voici le graphe :
(les trois courbes du bas sont celle obtenues avec Newton-Cotes d’ordres
supérieurs)
On note qu’à N fixé les formules de Newton-Cotes sont plus adaptées que
Trapèze ou Romberg.
Conclusion :
Parmi les différentes méthodes exposées on retiendra que
l’interpolation quadratique est plus adaptée au calcul de fonctions à
grandes variations (ou qui oscille rapidement) que l’interpolation linéaire.
Le calcul de l’erreur nous montre alors l’importance d’utiliser des
méthodes de calcul plus fines dans le but de raccourcir le temps de calcul
et d’améliorer la précision voulue.