% le script trace_compar_gauss permet de comparer les différents
% calculs de points et de poids de gauss en comparant l'intégrale exacte 
% et l'intégrale approchée d'une fonction selon que les poids et points
% ont été calculés : 
% *  par méthode directe;
% *  par méthode symbolique;
% * ou par méthode par diagonalisation,
% et ce pour chacune des quatre méthodes définies par c.
% les poids et les points seront préalablements calculés selon chacune des trois méthodes
% dans les tableaux : 
%          pointsleg poidsleg ...
%          pointslegsymb poidslegsymb ...
%          pointslegdiag poidslegdiag ...
%          pointstch poidstch ...
%          pointstchsymb poidstchsymb ...
%          pointstchdiag poidstchdiag ...
%          pointsher poidsher ...
%          pointshersymb poidssherymb ...
%          pointsherdiag poidsherdiag ...
%          pointslag poidslag ...
%          pointslagsymb poidslagsymb ...
%          pointslagdiag poidslagdiag ...
% voir script demo_stocke_points_poids 
%
% 
% ************ Fonctions auxiliaires utilisées ************
%
% saisiefonction, int_gauss
%
% *********************************************************




% logarithme de l'erreur nulle prise égale à log10zero
log10zero=-35;


clear xA yA xB yB xC yC Iexa erA erB erC;
disp('choix de la méthode : ')
c=input('entrez 1, 2, 3 ou 4 : ');
disp(' ');
disp('Entrée de la fonction r telle que r=f/w sur (a,b)  où w est le poids ') ;
disp(' ');
fcn=saisiefonction;
Iexa=input('entrez la valeur exacte de l''intégrale de r=f/w sur (a,b) : ') ;
erA=zeros(1,nAmax+1);
yA=zeros(1,nAmax+1);
erB=zeros(1,nBmax+1);
yB=zeros(1,nBmax+1);
erC=zeros(1,nCmax+1);
yC=zeros(1,nCmax+1);
switch c
   case 1
      pointsA=pointsleg;
      poidsA=poidsleg;
      pointsB=pointslegsymb;
      poidsB=poidslegsymb;
      pointsC=pointslegdiag;
      poidsC=poidslegdiag;
   case 2
      pointsA=pointstch;
      poidsA=poidstch;
      pointsB=pointstchsymb;
      poidsB=poidstchsymb;
      pointsC=pointstchdiag;
      poidsC=poidstchdiag;
   case 3
      pointsA=pointsher;
      poidsA=poidsher;
      pointsB=pointshersymb;
      poidsB=poidshersymb;
      pointsC=pointsherdiag;
      poidsC=poidsherdiag;
   case 4
      pointsA=pointslag;
      poidsA=poidslag;
      pointsB=pointslagsymb;
      poidsB=poidslagsymb;
      pointsC=pointslagdiag;
      poidsC=poidslagdiag;
end


for k=0:nAmax
   auxi=int_gauss(k,pointsA,poidsA,fcn);
   erA(k+1)=abs(auxi-Iexa);
end
for k=0:nBmax
   auxi=int_gauss(k,pointsB,poidsB,fcn);
   auxi=vpa(auxi)-Iexa;
   if ~(isnumeric(auxi))
      auxi=double(auxi);
   end
   erB(k+1)=abs(auxi);
end
for k=0:nCmax
   auxi=int_gauss(k,pointsC,poidsC,fcn);
   erC(k+1)=abs(auxi-Iexa);
end
indnul=find(erA==0);
indnonnul=find(erA~=0);
yA(indnul)=log10zero;
yA(indnonnul)=log10(erA(indnonnul));
indnul=find(erB==0);
indnonnul=find(erB~=0);
yB(indnul)=log10zero;
yB(indnonnul)=log10(erB(indnonnul));
indnul=find(erC==0);
indnonnul=find(erC~=0);
yC(indnul)=log10zero;
yC(indnonnul)=log10(erC(indnonnul));
xA=log10(1:nAmax+1);
xB=log10(1:nBmax+1);
xC=log10(1:nCmax+1);
clf;
hold on;
plot(xA,yA,'b',xB,yB,'r',xC,yC,'g');
xlabel('logarithme 10 du nombre de points d''intégration');
ylabel('logarithme 10 de l''erreur d''intégration');
legend('directe','symbolique','diagonalisation',0);
hold off;


   









