% inte02.m
% fd, 04 octobre 2008, 04 mars 2025  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
printf("Calcul des erreurs dans le calcul des integrales \n");
 function  A=ff(x);   A = 1 / (1+x) ;   endfunction 
% function  A=ff(x);   A = sqrt(x) ;   endfunction 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 valex = log(2) ; 
% valex = 2/3 ; 


format long

%                                         donnees generales  
mm = 11          %  nombre de maillages
mail =  zeros(mm,1) ;  erro =   zeros(mm,5) ; 


n = 1          % maillage initial  
for k=1:mm  ; 
mail(k) = log(n) / log(2) ; 
 


        dx = 1/n ; 
xx = zeros(n+1,1) ; uu = zeros(n+1,1) ;
for j=1:n+1 ; 
xx(j) = (j-1) * dx ; uu(j) = ff(xx(j)) ; 
end ;  
%                                   somme de Riemann a gauche 
zi1 = 0 ;  
for j=1:n ; zi1 = zi1 + dx * uu(j) ; end 
%                                   somme de Riemann a droite 
zi2 = 0 ; 
for j=2:n+1 ; zi2 = zi2 + dx * uu(j) ; end  
%                                                point milieu  
zi3 = 0 ; 
for j=1:n ; 
xxx = (xx(j)+xx(j+1))/2 ; 
zi3 = zi3 + dx * ff(xxx) ; end  
%                                                    trapezes  
zi4 =  dx * ( ff(xx(1)) + ff(xx(n+1)) ) / 2    ; 
for j=2:n ;  
zi4 = zi4 + dx * ff(xx(j)) ; end  
%                                                     Simpson  
zi5 =  dx * ( ff(xx(1)) + ff(xx(n+1)) ) / 6    ; 
for j=2:n ;   zi5 = zi5 + dx * ff(xx(j)) / 3 ; end  
for j=1:n ;   
xxx = (xx(j)+xx(j+1))/2 ; 
zi5 = zi5 + 2 * dx * ff(xxx) / 3 ; end  

% zi1 , zi2 , zi3 , zi4 , zi5 

erro(k,1) = log (abs ( zi1-valex))  / log(2) ; 
erro(k,2) = log (abs ( zi2-valex))  / log(2) ;
erro(k,3) = log (abs ( zi3-valex))  / log(2) ; 
erro(k,4) = log (abs ( zi4-valex))  / log(2) ;  
erro(k,5) = log (abs ( zi5-valex))  / log(2) ; 

n = 2*n ; 
end 

zi1 , zi2 , zi3 , zi4 , zi5 
%                         calcul elementaire des pentes 
p1 = - ( erro(mm,1)-erro(1,1) ) / ( mail(mm) - mail(1) )
p2 = - ( erro(mm,2)-erro(1,2) ) / ( mail(mm) - mail(1) )
p3 = - ( erro(mm,3)-erro(1,3) ) / ( mail(mm) - mail(1) )
p4 = - ( erro(mm,4)-erro(1,4) ) / ( mail(mm) - mail(1) )
p5 = - ( erro(mm,5)-erro(1,5) ) / ( mail(mm) - mail(1) )



 plot ( mail , erro(:,1) ,  '@r;gauche;'   , \ 
        mail , erro(:,2) ,  '@b;droite;'   , \ 
        mail , erro(:,3) ,  '*r;milieu;'   , \ 
        mail , erro(:,4) ,  '*b;trapezes;' , \ 
        mail , erro(:,5) ,  '*r;Simpson;'  ) ; 

title ('convergence des erreurs dans le calcul d une integrale') ;
print('02-convergence-calcul-integrales', '-djpg','-S891,630'); 


