%% Pour disposer de la procédure loptok. input string; %% Définition de la procédure TEX et de quelques autres. input labels; lTAILLE := "12pt"; lFONTES := "\usepackage[bitstream-charter]{mathdesign}"; % lFONTES := "\usepackage{fourier}"; %% Pour les labels inscrits dans ce source. verbatimtex %&latex \documentclass[12pt]{article} \usepackage[latin1]{inputenc} \usepackage[bitstream-charter]{mathdesign} % \usepackage{fourier} \everymath{\displaystyle} \begin{document} etex %% Couleurs. color couleur[]; couleur1 := (0.28,0.24,0.55); % DarkSlateBlue %% Unité. u:=cm; %% Adaptation de labelsoffet. labeloffset := 7; %% Raccourci pour scantokens. let st = scantokens; %% Représentation d'une subdivision (ordonnée: 0). vardef subdivision(text t) = save p,pt; for p = t: if numeric p: draw (p*u,-5) -- (p*u,5); pt := p; else: label.bot(TEX("$" & p & "$"),(pt*u,-1)); fi; endfor; enddef; beginfig(1); draw (0,0)--(9u,0) withpen pencircle scaled 0.75; draw (u,0) -- (8u,0) withpen pencircle scaled 2; subdivision(1,"x_0",2.3,"x_1",4.2,"x_2",5,6.1,6.8,"x_{n-1}",8,"x_n"); label.top(btex $a$ etex,(u,0)); label.top(btex $b$ etex,(8u,0)); endfig; %% Représentation d'une fonction en escalier. vardef fescalier(text t) = string $[],s_,f_; numeric x_,y_,y__; f_ := ""; y_ := 0; for p_ = t: n_ := 0; % Ceci semble nécessaire pour forcer le type string % de l'argument passé à loptok. s_ := p_; % Découpage de la chaîne passée en argument. forever: $[incr n_] := loptok s_; exitif $[n_]=""; endfor; if $1 = "-": % Projections sur l'axe des abscisses. draw ((x_,min(0,y_,y__,st $2))--(x_,max(0,y_,y__,st $2))) scaled u dashed evenly; y_ := st $2; % Projections éventuelles sur l'axe des ordonnées. if n_=4: draw ((0,y_)--(x_,y_)) scaled u dashed evenly; label.lft(TEX("$" & $3 & "$"),(0,y_*u)); fi; % Flag indiquant qu'un intervalle est défini. f_ := "*"; else: % Dessin du pas... if f_<>"": draw ((x_,y_)--(st $1,y_)) scaled u withpen pensquare scaled 1.25 withcolor couleur1; fi; x_ := st $1; y__ := st $2; % Dessin du point... draw (x_, y__) scaled u withpen pencircle scaled 3 withcolor couleur1; draw ((0,-3)--(0,3)) shifted (x_*u,0); % Label éventuel du point de la subdivision. if n_=4: label.bot(TEX("$"& $3 &"$"),(x_*u,-1)); fi; fi; endfor; % Dernières projections. draw ((x_,min(0,y_,y__))--(x_,max(0,y_,y__))) scaled u dashed evenly; enddef; beginfig(2); drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; fescalier( "1 4 x_0", "- 4 f_1", "2.5 3 x_1", "- 1 f_2", "3 1 x_2", "- 2", "4.1 2", "- 3", "6 5", "- 4.5 f_{n-1}", "7.2 1 x_{n-1}", "- -1.5 f_n", "8.5 -1.5 x_n" ); label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.ulft(btex $a$ etex,(u,0)); label.urt(btex $b$ etex,(8.5u,0)); endfig; % La précision de la détermination de l'image dépend de l'étendue du % segment qui va être utilisé pour définir l'intersection avec la courbe % dans la procédure qui suit. CYMAX := 10; CYMIN := -10; % Obtenir l'image d'un réel x par une fonction définie par une courbe. vardef cy(expr p,x) = ypart (p intersectionpoint ((x,CYMIN)--(x,CYMAX))) enddef; vardef cpt(expr p,x) = p intersectionpoint ((x,CYMIN)--(x,CYMAX)) enddef; % Obtenir le paramètre du point d'abscisse x de la courbe. vardef ct(expr p,x) = xpart (p intersectiontimes ((x,CYMIN)--(x,CYMAX))) enddef; vardef cymin(expr p,a,b) = ypart (llcorner (subpath(ct(p,a),ct(p,b)) of p)) enddef; vardef cymax(expr p,a,b) = ypart (ulcorner (subpath(ct(p,a),ct(p,b)) of p)) enddef; beginfig(3); path courbe; courbe := (0.99,1){dir 70}..(4,4)..(6,2)..{dir 30}(8.51,5); % fonction en escalier qui majore la fonction f. xt := 1; for x:=1.8,2.5,3.5,4.2,5.2,6.7,8.1,8.5: y := cymax(courbe,xt,x); fill ((xt,0)--(xt,y)--(x,y)--(x,0)--cycle) scaled u withcolor (0.7,0.8,0.7); draw ((xt,0)--(xt,y)--(x,y)--(x,0)--cycle) scaled u withcolor (0.5,0.6,0.5); xt := x; endfor; % fonction en escalier qui minore la fonction f. xt := 1; for x:=1.5,2.1,3,3.6,4,5.2,7,8.1,8.5: y := cymin(courbe,xt,x); fill ((xt,0)--(xt,y)--(x,y)--(x,0)--cycle) scaled u withcolor (0.6,0.6,0.7); draw ((xt,0)--(xt,y)--(x,y)--(x,0)--cycle) scaled u withcolor (0.4,0.4,0.5); xt := x; endfor; drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; draw courbe scaled u withpen pencircle scaled 1.5 withcolor couleur1; draw ((0.5,5.5)--(1.5,5.5)) scaled u withpen pencircle scaled 1.5 withcolor couleur1; label.rt(btex $y=f(x)$ etex,(1.5u,5.5u)); path rect; rect = (0,-0.2)--(1,-0.2)--(1,0.2)--(0,0.2)--cycle; fill rect shifted (0.5,-1) scaled u withcolor (0.7,0.8,0.7); draw rect shifted (0.5,-1) scaled u withcolor (0.5,0.6,0.5); label.rt(btex {\footnotesize{}intégrale d'une fonction en escalier qui majore $f$} etex,(1.5u,-u)); fill rect shifted (0.5,-1.6) scaled u withcolor (0.6,0.6,0.7); draw rect shifted (0.5,-1.6) scaled u withcolor (0.4,0.4,0.5); label.rt(btex {\footnotesize{}intégrale d'une fonction en escalier qui minore $f$} etex,(1.5u,-1.6u)); label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.ulft(btex $a$ etex,(u,0)); label.urt(btex $b$ etex,(8.5u,0)); endfig; DXSUIV := 0.001; CXMAX := 10; CXIND := 0; % Obtenir l'abscisse du premier point d'intersection de la demi-droite % [(x,y)--(infinity,y)[ avec les courbes p ou q. En fait infinity = CXMAX. vardef cxsuiv(expr p,q,x,y) = numeric x_[],y_[]; (x_1,y_1) = p intersectiontimes ((x+DXSUIV,y)--(CXMAX,y)); (x_2,y_2) = q intersectiontimes ((x+DXSUIV,y)--(CXMAX,y)); if (x_1<0) and (x_2<0): CXIND := 0; x elseif x_2<0: CXIND := 1; xpart point x_1 of p elseif x_1<0: CXIND := 2; xpart point x_2 of q else: x_3 = xpart point x_1 of p; x_4 = xpart point x_2 of q; if x_3"": ti_ := ct(c,x_); tf_ := ct(c,st $1); draw ((subpath(ti_,tf_) of c) affinite(a_,point ti_ of c, point tf_ of c) shifted (0,v_)) scaled u withpen pensquare scaled 1.25 withcolor couleur1; fi; x_ := st $1; y__ := cy(c,x_) + (st $2); % Dessin du point... draw (x_, y__) scaled u withpen pencircle scaled 3 withcolor couleur1; draw ((0,-3)--(0,3)) shifted (x_*u,0); % Label éventuel du point de la subdivision. if n_=4: label.bot(TEX("$"& $3 &"$"),(x_*u,-1)); fi; fi; endfor; % Dernières projections. yav_ := cy(c,x_) + v_; draw ((x_,min(0,yav_,y__))--(x_,max(0,yav_,y__))) scaled u dashed evenly; enddef; beginfig(5); path courbe; courbe := (0.99,1){dir 70}..(4,4.1)..(6,3)..{dir 30}(8.51,5); fmorceaux(courbe, "1 0 x_0", "- 1 0", "2 0 x_1", "- -1 1", "3.5 0.5", "- 1/3 -1", "4.8 0.3", "- -0.8 0.3", "6.4 0.2 x_{n-1}", "- 2 -1", "8.5 -0.5 x_n"); % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.ulft(btex $a$ etex,(u,0)); label.urt(btex $b$ etex,(8.5u,0)); label(btex \begin{minipage}{7cm}\centering \footnotesize Fonction continue par morceaux sur un segment. \end{minipage} etex,(5u,-1.5u)); endfig; beginfig(6); path courbe,tm; courbe := (0.99,1){dir 70}..(4,4.1)..(6,3)..{dir 30}(8.51,5); a_ := 2.5; x_ := 6; tm := buildcycle( (a_,-10)--(a_,10), courbe, (x_,10)--(x_,-10), (x_,0)--(a_,0) ); RT(tm,couleur2,couleur3); draw courbe scaled u withpen pencircle scaled 1.5 withcolor couleur1; % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.ulft(btex $y=f(x)$ etex,u*cpt(courbe,8.5)); label.bot(btex $a$ etex,(a_*u,0)); label.bot(btex $x_0$ etex,(x_*u,0)); m := (a_+x_)/2; label.bot(btex $\rightarrow$ etex,u*(m,0)); label(btex \boldmath $\displaystyle\int_a^{x_0}f(t)\,\mathrm{d}t$ etex,u*(m,1.5)) withcolor white; label.top(btex $I$ etex,(8.4u,0)); label(btex \begin{minipage}{7cm}\centering \footnotesize Fonction intégrale \end{minipage} etex,(5u,-u)); endfig; beginfig(7); path courbe,tm[]; courbe := (0.99,1){dir 70}..(4,4.1)..(6,3)..{dir 30}(8.51,5); a_ := 2.5; x_ := 6.7; h_ := 0.2; tm1 := buildcycle( (a_,-10)--(a_,10), courbe, (x_+h_,10)--(x_+h_,-10), (x_+h_,0)--(a_,0) ); tm2 := buildcycle( (a_,-10)--(a_,10), courbe, (x_,10)--(x_,-10), (x_,0)--(a_,0) ); RT(tm1,couleur1,couleur1); RT(tm2,couleur2,couleur2); draw courbe scaled u withpen pencircle scaled 1.5 withcolor couleur1; % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.ulft(btex $y=f(x)$ etex,u*cpt(courbe,8.5)); label.bot(btex $a$ etex,(a_*u,0)); label.ulft(btex $x_0$ etex,u*(x_,-0.74)); label.urt(btex $x_0+h$ etex,u*(x_+h_,-0.74)); label.top(btex $I$ etex,(8.4u,0)); label(btex \begin{minipage}{7cm}\centering \footnotesize Dérivation d'une fonction intégrale \end{minipage} etex,(5u,-1.5u)); endfig; % La courbe représentative d'une fonction étant donnée ainsi que a, b % les bornes d'un segment sur laquelle la fonction est définie, la procédure % suivante détermine la représentation de la fonction intégrale (nulle en a) % sur [a,b]. vardef fintegrale(expr courbe,a,b,n) = save s_; s_ := 0.5 * cy(courbe,a) * (b-a)/n; save h_; h_ := (b - a) / n; save c_; (a,0) .. for i=1 upto n-1: hide(c_:=a+i*h_; s_:=s_+cy(courbe,c_)*h_) (c_,s_) .. endfor (b,s_+cy(courbe,b)*.5*h_) enddef; vardef lignes_horizontales(expr xa,xb,ya,yb,d,u) = save ni,nf; ni := floor(ya/d); nf := floor(yb/d); for i=ni upto nf: draw ((xa,i*d)--(xb,i*d)) scaled u; endfor; enddef; vardef lignes_verticales(expr xa,xb,ya,yb,d,u) = save ni,nf; ni := floor(xa/d); nf := floor(xb/d); for i=ni upto nf: draw ((i*d,ya)--(i*d,yb)) scaled u; endfor; enddef; vardef grille(expr xa,xb,ya,yb,u) = drawoptions(withpen pencircle scaled 0.25 withcolor (1.2*(0.8,0.6,0.2))); lignes_horizontales(xa,xb,ya,yb,0.1,u); lignes_verticales(xa,xb,ya,yb,0.1,u); drawoptions(withpen pencircle scaled 0.75 withcolor (0.8,0.6,0.2)); lignes_horizontales(xa,xb,ya,yb,1,u); lignes_verticales(xa,xb,ya,yb,1,u); drawoptions(); enddef; beginfig(8); grille(-2,9,-2,6,u); path courbe; courbe := (0.99,1){dir 70}..(3,2)..(4,1.1)..(5,-0.3)..(6,-1)..{dir 30}(8.51,2); draw courbe scaled u withpen pencircle scaled 1.5 withcolor couleur1; path integrale; integrale := fintegrale(courbe,1,8.5,300); ax := 2; ay := cy(integrale,ax); draw (integrale shifted (0,-ay)) scaled u withpen pencircle scaled 1.5 withcolor couleur2; % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.urt(btex $y=f(x)$ etex,(6u,u)); label.bot(btex $a$ etex,(ax*u,0)); draw ((0,-3) -- (0,3)) shifted (u*ax,0); label.urt(btex $y=\int_a^xf(t)\,\mathrm{d}t$ etex,(6u,3.5u)); endfig; %% Représentation d'une fonction continue par morceaux et construction d'une %% fonction intégrale. path INTFMORCEAUX; vardef fmorceauxEtIntegrale(expr c,a,b,n)(text t) = string $[],s_,f_; numeric x_,yav_,yap_,y__; path p_; INTFMORCEAUX := (a,0)--(a,0); f_ := "";v_ := 0; for t_ = t: n_ := 0; % Ceci semble nécessaire pour forcer le type string % de l'argument passé à loptok. s_ := t_; % Découpage de la chaîne passée en argument. forever: $[incr n_] := loptok s_; exitif $[n_]=""; endfor; if $1 = "-": % Projections sur l'axe des abscisses. yav_ := cy(c,x_) + v_; v_ := st $3; a_ := st $2; yap_ := cy(c,x_) + v_; draw ((x_,min(0,yav_,yap_,y__))--(x_,max(0,yav_,yap_,y__))) scaled u dashed evenly; % Flag indiquant qu'un premier intervalle est défini. f_ := "*"; else: if f_<>"": ti_ := ct(c,x_); tf_ := ct(c,st $1); p_ := ((subpath(ti_-0.001,tf_+0.001) of c) affinite(a_,point ti_ of c, point tf_ of c) shifted (0,v_)); INTFMORCEAUX := INTFMORCEAUX -- (fintegrale(p_,x_,st $1,floor(((st $1)-x_)/(b-a)*n)) shifted (0,ypart point length(INTFMORCEAUX) of INTFMORCEAUX)); draw p_ scaled u withpen pensquare scaled 1.25 withcolor couleur1; fi; x_ := st $1; y__ := cy(c,x_) + (st $2); % Dessin du point... draw (x_, y__) scaled u withpen pencircle scaled 3 withcolor couleur1; draw ((0,-3)--(0,3)) shifted (x_*u,0); fi; endfor; % Dernières projections. yav_ := cy(c,x_) + v_; draw ((x_,min(0,yav_,y__))--(x_,max(0,yav_,y__))) scaled u dashed evenly; enddef; beginfig(9); grille(-2,9,-2,6,u); path courbe; courbe := (0.99,1){dir 70}..(4,4.1)..(6,3)..{dir 30}(8.51,5); fmorceauxEtIntegrale(courbe,1,8.5,200, "1 0", "- -4 0", "2 0", "- -1 -4", "3.5 -4", "- 1/3 -3", "4.8 -4.5", "- -1 -4", "6.4 0.2", "- 2 -2", "8.5 -2 "); ax := 5.5; ay := cy(INTFMORCEAUX,ax); draw (INTFMORCEAUX shifted (0,-ay)) scaled u withpen pencircle scaled 1.5 withcolor couleur2; % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.top(btex $a$ etex,(ax*u,0)); draw ((0,-3) -- (0,3)) shifted (u*ax,0); label.urt(btex $I$ etex,(8.5u,0)); draw (3u,3.5u)--(4u,3.5u) withpen pencircle scaled 1.5 withcolor couleur1; draw (3u,4.5u)--(4u,4.5u) withpen pencircle scaled 1.5 withcolor couleur2; label.rt(btex $y=f(x)$ etex,(4u,3.5u)); label.rt(btex $y=\int_a^xf(t)\,\mathrm{d}t$ etex,(4u,4.5u)); endfig; beginfig(10); path courbe,fint; courbe := (0.99,1){dir 70}..(4,4.5)..(6,2)..{dir 30}(8.51,4); fint := fintegrale(courbe,1,8.5,200); moy := (ypart point length(fint) of fint) / (8.5 - 1); inf := cymin(courbe,1,8.5); sup := cymax(courbe,1,8.5); fill ((1,0)--(1,moy)--(8.5,moy)--(8.5,0)--cycle) scaled u withcolor couleur4; fill buildcycle ((1,0) -- (1,10), courbe, (8.5,10)--(8.5,0)--(1,0)) scaled u withcolor couleur2; draw courbe scaled u withpen pencircle scaled 1.5 withcolor couleur1; draw ((0,moy)--(8.5,moy)) scaled u dashed evenly; draw ((0,inf)--(8.5,inf)) scaled u dashed evenly; draw ((0,sup)--(8.5,sup)) scaled u dashed evenly; draw ((1,sup)--(1,0)) scaled u dashed evenly; draw ((8.5,sup)--(8.5,0)) scaled u dashed evenly; % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.bot(btex $a$ etex,(u,0)); draw ((0,-3) -- (0,3)) shifted (u,0); label.bot(btex $b$ etex,(8.5u,0)); draw ((0,-3) -- (0,3)) shifted (8.5u,0); label.lft(btex $M$ etex, (0,sup*u)); label.lft(btex $m$ etex, (0,inf*u)); label.lft(btex $\frac1{b-a}\int_a^bf(t)\,\mathrm{d}t$ etex,(0,moy*u)); label.urt(btex $y=f(x)$ etex,u*(4.65,cy(courbe,4.65))); label(btex \begin{minipage}{7cm}\centering \footnotesize Valeur moyenne d'une fonction intégrable. \end{minipage} etex,(5u,-1.5u)); endfig; vardef sRiemann(expr c,a)(text t) = save f,x,xx,y; f:= 0; xx := a; for p_=t: if f=0: x := p_; y := cy(c,x); else: RT((xx,0)--(p_,0)--(p_,y)--(xx,y)--cycle,couleur5,couleur1); draw (x,y) scaled u withpen pencircle scaled 3; xx := p_; fi; f := 1 - f; endfor; enddef; beginfig(11); path courbe; courbe := (0.99,1){dir 60}..(4,4.5)..(6,2)..{dir 60}(8.51,4); sRiemann(courbe, 1, 1.3, 2, 2.7, 3.5, 4.5, 5, 5.5, 5.8, 6.2, 6.8, 7.2, 7.7, 8, 8.5); draw courbe scaled u withpen pencircle scaled 1.5 withcolor couleur1; % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.bot(btex $a$ etex,(u,0)); draw ((0,-3) -- (0,3)) shifted (u,0); label.bot(btex $b$ etex,(8.5u,0)); draw ((0,-3) -- (0,3)) shifted (8.5u,0); draw ((5.5,0)--(5.5,cy(courbe,5.5))--(0,cy(courbe,5.5))) scaled u dashed evenly; label.bot(btex $x_{i-1}$ etex,(5u,0)); label.bot(btex $\xi_i$ etex,(5.5u,-10)); label.lft(btex $f\left(\xi_i\right)$ etex,(0,u*cy(courbe,5.5))); label.bot(btex $x_i$ etex,(5.8u,0)); label.urt(btex $y=f(x)$ etex,u*(4.65,0.4+cy(courbe,4.65))); label(btex \begin{minipage}{7cm}\centering \footnotesize Somme de Riemann\\ \end{minipage} etex,(5u,-1.5u)); endfig; vardef sRiemannPasConstant(expr c,a,b,n) = save i,h,y; h:= (b-a)/n; for i=1 upto n: y := cy(c,a+(i-0.5)*h); RT(((-h,0)--(0,0)--(0,y)--(-h,y)--cycle) shifted (a+i*h,0), couleur5,couleur1); endfor; enddef; beginfig(12); path courbe; courbe := (0.99,1){dir 60}..(4,4.5)..(6,2)..{dir 60}(8.51,4); sRiemannPasConstant(courbe,1,8.5,30); draw courbe scaled u withpen pencircle scaled 1.5 withcolor couleur1; % Les axes. drawarrow (-2u,0)--(9u,0) withpen pencircle scaled 0.75; drawarrow (0,-2u)--(0,6u) withpen pencircle scaled 0.75; % Le segment. draw ((1,0)--(8.5,0)) scaled u withpen pensquare scaled 1.5; label.lft(btex $y$ etex,(0,6u)); label.bot(btex $x$ etex,(9u,0)); label.bot(btex $a$ etex,(u,0)); draw ((0,-3) -- (0,3)) shifted (u,0); label.bot(btex $b$ etex,(8.5u,0)); draw ((0,-3) -- (0,3)) shifted (8.5u,0); label.urt(btex $y=f(x)$ etex,u*(4.65,cy(courbe,4.65))); label(btex \begin{minipage}{7cm}\centering \footnotesize Somme de Riemann\\ (\textit{subdivision à pas constant}) \end{minipage} etex,(5u,-u)); endfig; end