clear
//calcul de l'integrale d'une fonction f 
//entre a et b par la méthode des trapèzes (val3)
//precision epsilon fixee
//
epsilon=evstr(x_dialog('precision souhaitee','0.0000001'))
// 
//choix de la fonction 
a=0; 
b=1; 
deff('y=f(x)','y=sin(x)-x') 
//valeur approchee 
val1=integrate('sin(x)-x','x',a,b); 
//valeur exacte 
val2=-cos(b)-(b^2)/2+cos(a)+(a^2)/2; 
//trapezes et rectangles a gauche
p=0;n=1;
val3a=0;val3=(f(a)+f(b))/2*(b-a);A3=[];A4=[];A5=[];
write(%io(2),' Npts trapezes  rectangles gauche ') 
while (abs(val3-val2)>epsilon)
p=p+1; 
n=2^p;
h=(b-a)/n; 
for i=1:2:n-1
  val3a=val3a+f(a+i*h); 
end
val3=(val3a+(f(a)+f(b))/2)*h;
val5=(val3a+f(a))*h;
//
write (%io(2),[n,abs(val3-val2),abs(val5-val2)],'(f6.0,1x,e14.6,1x,e14.6)')  
A3=[A3;n];A4=[A4;abs(val3-val2)];A5=[A5;abs(val5-val2)];
end 
//
figure(1)
clf
plot2d('gll',A3,A4);
plot2d('gll',A3,A5,2);
xtitle('calcul approche de l integrale de sin(x)-x entre 0 et 1 par méthode des rectangles et des trapèzes (échelle log)','npoints','erreur')
 
