clear
//calcul de l'integrale d'une fonction f 
//entre a et b par la méthode des rectangles, trapèzes et Simpson
//precision epsilon fixee
//
epsilon=evstr(x_dialog('precision souhaitee','0.0001'))
// 
//choix de la fonction 
a=0; 
b=1; 
deff('y=f(x)','y=sin(x)-x') 
//
//valeur exacte 
val2=-cos(b)-(b^2)/2+cos(a)+(a^2)/2; 
//
p=0;n=1;
A3=[];A4=[];A5=[];A6=[];
valRec=0;valTra=0;valSim=0;
//
while (abs(valRec-val2)>epsilon)
p=p+1; 
n=2^p;
h=(b-a)/n; 
valRec=0;valTra=0;valSim=0;
for i=0:n-1
  valRec=valRec+h*f(a+i*h); //rectangles a gauche
  valTra=valTra+h*(f(a+i*h)+f(a+(i+1)*h))/2;  // trapèzes
  valSim=valSim+h*(1/6*f(a+i*h)+4/6*f(a+(i+1/2)*h)+1/6*f(a+(i+1)*h)); // Simpson
end
//
A3=[A3;n];A4=[A4;abs(valRec-val2)];A5=[A5;abs(valTra-val2)];A6=[A6;abs(valSim-val2)];
end 
//
figure(1)
clf
plot2d('gll',A3,A4);
plot2d('gll',A3,A5,2);
plot2d('gll',A3,A6,3);
xtitle('calcul approche de l integrale de sin(x)-x entre 0 et 1 par méthode des rectangles et des trapèzes et de Simpson (échelle log)','npoints','erreur')
legends(['rectangles','trapezes','simpson'],[1,2,3])
 
