//TP2 Scilab

//Partie 1 - méthode des réctangle à gauche

function r = rectangle_gauche(f, a, b, n)
h = (b - a) / (n - 1);
x = linspace(a, b, n);
y = f(x(1:n-1));
r = h * sum(y);
endfunction
//cette fonction calcul l'intégrale de f entre a et b par la méthode des rectangle à gauche avec un pas n.

function r=truc(t)
    r=4 ./(1+t.^2)
endfunction

resu = rectangle_gauche(truc, 0, 1, 20)
err = abs(resu - %pi)

//Partie 2 - méthode des rectangle à droite

function r = rectangle_droite(f, a, b, n)
h = (b - a) / (n - 1);
x = linspace(a, b, n);
y = f(x(2:n));
r = h * sum(y);
endfunction
//cette fonction calcul l'intégrale de f entre a et b par la méthode des rectangle à droite avec un pas n.

function r=trucD(t)
    r=-8 .*t ./(1+t.^2).^2
endfunction
//c'est la dérivée de la fonction truc

X=linspace(0,1,100)
Y=trucD(X)
M=max(abs(Y))
//ce M est une assez bonne approximation de la constante qui dirige l'erreur. On peut améliorer en se donnant un grille plus finne : X=linspace(0,1,500), X=linspace(0,1,1000)... 

//Partie 3 - méthode des trapèzes

//Q5 z=(y(1:n-1)+y(2:n))./2 est le vecteur qui contient les moyennes (y(i)+y(i+1))/2

function r=trapeze(f,a,b,n)
    h = (b - a) / (n - 1);
x = linspace(a, b, n);
y = f(x(1:n));
z=(y(1:n-1)+y(2:n))./2;
r = h * sum(z);
endfunction
//cette fonction calcul l'intégrale de f entre a et b par la méthode des trapezes avec un pas n.

//petit bonus, comparaison de la convergence vers %pi de rectangle à gauche / trapèze. 
N=10:10:1100
for i=1:length(N)
   E1(i)=rectangle_gauche(truc,0,1,N(i))
   E3(i)=trapeze(truc,0,1,N(i))  
end
PI=%pi*ones(1,length(N))
plot2d(N,[E1,E3,PI'])
//il faut vraiment zoomer pour voir l'erreur de la méthode des trapèze. C'est vuriausement plus puissant.
