azerty27
Messages postés6Date d'inscriptionmercredi 14 août 2013StatutMembreDernière intervention22 juin 2014
-
22 juin 2014 à 10:31
Bonjour,
j'ai un petit de problème de récursivité (dans la fonction simpsonadapt) avec le programme suivant qui calcule une approximation de l'intégrale de a à b d'une fonction f par la méthode de quadrature adaptative de Simpson.
Merci par avance de votre aide.
% simpsonestim calcule l'estimation grossière res de f par une approche de type Monte-Carlo. % la valeur de sortie est l'estimation grossière de I(f)
function [res]=simpsonestim(f, a, b) L=b-a; m=(a+b)*0.5; s=0; for i =1:5 ui=rand(1,1); xi=a+L*ui ; fx=feval(f,xi); s=s+fx; end res = (1/8)*L*(f(a)+f(m)+f(b)+fx); if res ==0 then res = b-a; end return end
% la fonction simpson calcule l'approximation de f sur l'intervalle [a, b] obtenue par la méthode de Simpson
function [is]=simpson(f, a, b) L=b-a; fa=feval(f, a); fm= feval(f,(a+b)*0.5); fb=feval(f,b); is = (L/6)*(fa+4*fm+fb); return end
% la fonction simpsonadapt tente d'approcher l'intégrale de la fonction f sur l'intervalle [a, b ] en utilisant une quadrature de Simpson adaptative récursive
function [i1]=simpsonadapt(f, a, b) m=(a+b)*0.5; gauche = simpson(f,a,m); droite = simpson (f,m,b); tmp = gauche + droite; i1 = (16*tmp-i2)*(1/15); i2=tmp ; if (abs(simpsonestim(f, a,b))+(i1-i2)== abs(simpsonestim(f,a,b))) | (m <= a) | (b<= m) then return; else i1 = simpsonadapt(f,a,m) + simpsonadapt(f,m,b); return; end endfunction