
clear
clf();

// Question (a)
//----------------------------------------------------------------
// definition de la fonction calculant l'approximation de l'integrale
//a partie de la somme de Riemman. Cette fonction a come argument le
//nombre de points de discretisation N et renvoie la valeur de l'integrale J
//ainsi que la valeur de l'erreur relative err

function [J,err]= sommeRiemann(N)
x=[1:1/N:2];
y=log(x);
J=sum(y(1:N))/N;
vex=2*log(2)-1;
err=abs(J-vex)/vex;
endfunction;

//----------------------------------------------------------------------



//Question (b)
//----------------------------------------------------------------------
// programme principal

N=50;
x=[1:1/N:2];
y=log(x);

xset("window",0)
// trace la fonction log aux points x dans la fenetre graphique 0
plot2d(x,y);

// trace la fonction log constante par morceaux (en bleu) dans la meme fenetre
plot2d2(x,y,2);

// Calcul de l'erreur en fonction du nombre de points dans la somme
Nmin=10;
Nmax=1000;



err=zeros(1,Nmax-Nmin+1);
v=zeros(1,Nmax-Nmin+1);

//boucle sur N
for N=Nmin:Nmax,
 [v(1,N-Nmin+1),err(1,N-Nmin+1)]=sommeRiemann(N);
end

set('current_figure',1)
//trace l'erreur en loglog dans la fenetre 1
plot2d([Nmin:Nmax],err,logflag="ll");

//trace la fonction 1/N en loglog (en bleu) dans la meme fenetre
plot2d([Nmin:Nmax],1../[Nmin:Nmax],logflag="ll",style=2);




