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.