% script : demo_compar_methode_int compare les quatre méthodes d'intégrations 
% - des rectangles ,
% - du point milieu ,
% - des trapèzes ,
% - de Simpson .
% en comparant l'intégrale calculée avec l'intégrale exacte.
% en terme d'erreur commise.
%
%
% ************ Fonctions auxiliaires utilisées ************
%  
%   saisiefonction, int_fcn
%
% *********************************************************


% ATTENTION : si erreur nulle, log(0)/log(10)=log10d0;
log10d0=-20;

a=input('Entrez l''extrémité inférieure de [a,b] : ');
b=input('Entrez l''extrémité supérieure de [a,b] : ');
nmin=input('Entrez la puissance de dix du nombre minimum de point de discrétisation : ');
nmax=input('Entrez la puissance de dix du nombre maximum de point de discrétisation : ');
p=input('Entrez le nombre total de point de calculs : ');
disp(' ');
disp(' ');
disp('entrée de la fonction à intégrer');
ch1=saisiefonction;
disp(' ');
disp(' ');
disp('entrée de sa primitive');
ch2=saisiefonction;
x=zeros(1,p);
erreur=zeros(4,p);
nombrecalcul=zeros(4,p);
% calcul des erreurs pour les quatre méthodes
integraleexacte=feval(ch2,b)-feval(ch2,a);
compteur=0;
for k=logspace(nmin,nmax,p)
   compteur=compteur+1;
   for methode=1:4
      kf=fix(k);
      x(compteur)=kf;
      intva=int_fcn(methode,kf,a,b,ch1);
      err=abs(intva-integraleexacte);
      if (err==0)
         erreur(methode,compteur)=log10d0;
      else
         erreur(methode,compteur)=log10(err);
      end
   end
end
log10x=log10(x);
% tracé des erreurs commises  par les différentes méthodes
plot(log10x,erreur(1,:),'b',...
     log10x,erreur(2,:),'r',...
     log10x,erreur(3,:),'g',...
     log10x,erreur(4,:),'y');
if exist(ch1)==1
   title(['erreur d''intégration pour la fonction ','inline(',formula(ch1),')']);
else
   title(['erreur d''intégration pour la fonction ',ch1]);
end
xlabel('logarithme 10 du nombre de points d''intégration');
ylabel('logarithme 10 de l''erreur d''intégration');
legend('rectangle','trapèzes','milieux','Simpson',0);


