Académique Documents
Professionnel Documents
Culture Documents
Projet_1 Nicolas et
Bousquet
Introduction :
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);
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);
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;
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);
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);
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;
%--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)
%--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 :
La mthode de Simpson :
2 - La mthode de Romberg :
>> 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
(les trois courbes du bas sont celle obtenues avec Newton-Cotes dordres
suprieurs)
Conclusion :