L'intégrale de Riemann
Les fonctions utilisées ici sont définies par des courbes. Metapost
permettant de récupérer des points d'intersection de deux courbes, il
est facile de définir des fonctions, calculer des intégrales approchées
et de représenter tout cela. Le source contient les différentes
procédures exploitées, au fur et à mesure des besoins et dans un état
brut.
L'archive contient le source, le fichier labels.mp et toutes
les figures au format PDF (elles sont consultables en cliquant sur l'image
PNG).
%% 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<x_4: CXIND := 1; x_3
else: CXIND := 2; x_4
fi
fi
enddef;
couleur2 := (0.6,0.6,0.7);
couleur3 := (0.4,0.4,0.5);
couleur4 := (0.7,0.8,0.7);
couleur5 := (0.5,0.6,0.5);
%% Remplir (couleur a) et dessiner (couleur b) un chemin fermé p.
def RT(expr p,a,b) =
fill p scaled u withcolor a;
draw p scaled u withcolor b
enddef;
beginfig(4);
e := 0.45;
path courbe[];
courbe0 := (0.99,1){dir 70}..(4,4.1)..(6,3)..{dir 30}(8.51,5);
courbe1 := courbe0 shifted (0,-e);
courbe2 := courbe0 shifted (0,e);
xt := 1;
in := 2;
forever:
yt := cy(courbe[in],xt);
xi := cxsuiv(courbe0,courbe2,xt,yt);
if CXIND=0: xi := 8.5
elseif CXIND=1: in := 2
elseif CXIND=2: in := 0
fi;
RT((xt,0)--(xt,yt)--(xi,yt)--(xi,0)--cycle,couleur4,couleur5);
exitif CXIND=0;
xt := xi;
endfor;
xt := 1;
in := 0;
forever:
yt := cy(courbe[in],xt);
xi := cxsuiv(courbe0,courbe1,xt,yt);
if CXIND=0: xi := 8.5
elseif CXIND=1: in := 1
elseif CXIND=2: in := 0
fi;
RT((xt,0)--(xt,yt)--(xi,yt)--(xi,0)--cycle,couleur2,couleur3);
exitif CXIND=0;
xt := xi;
endfor;
% 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;
% Les courbes
draw courbe0 scaled u
withpen pencircle scaled 1.5
withcolor couleur1;
for i=1 upto 2:
draw courbe[i] scaled u
withpen pencircle scaled 0.25
withcolor couleur1;
endfor;
draw ((0.5,5.7)--(1.5,5.7)) scaled u
withpen pencircle scaled 1.5
withcolor couleur1;
label.rt(btex $y=f(x)$ etex,(1.5u,5.7u));
draw ((0.5,5.2)--(1.5,5.2)) scaled u
withpen pencircle scaled 0.25
withcolor couleur1;
label.rt(btex $y=f(x)\pm\epsilon/2$ etex,(1.5u,5.2u));
label.lft(btex $y$ etex,(0,6u));
label.bot(btex $x$ etex,(9u,0));
label.bot(btex $a$ etex,(u,0));
label.bot(btex $b$ etex,(8.5u,0));
path tiret;
tiret := (-4,0)--(4,0);
y := cy(courbe0,8.5);
drawdblarrow ((8.75,y-e)--(8.75,y+e)) scaled u;
draw tiret shifted ((8.75,y-e) scaled u);
draw tiret shifted ((8.75,y+e) scaled u);
label.rt(btex $\epsilon$ etex,((8.75,y) scaled u));
y := cy(courbe0,1);
drawdblarrow ((0.75,y-e)--(0.75,y+e)) scaled u;
draw tiret shifted ((0.75,y-e) scaled u);
draw tiret shifted ((0.75,y+e) scaled u);
label.lft(btex $\epsilon$ etex, ((0.75,y) scaled u));
label(btex
\begin{minipage}{7cm}\centering \footnotesize Approximation
d'une fonction continue par des fonctions en escalier.
\end{minipage} etex,(5u,-u));
endfig;
def affinite(expr a,b,c) =
transformed
begingroup
transform T_;
b transformed T_ = b;
c transformed T_ = c;
(.5(b+c)+(0,1)) transformed T_ = (.5(b+c)+(0,a));
T_
endgroup
enddef;
%% Représentation d'une fonction continue par morceaux.
%% L'idée est de prendre une courbe, de la découper suivant une subdivision,
%% de translater les morceaux et de les transformer par une affinité.
vardef fmorceaux(expr c)(text t) =
string $[],s_,f_; numeric x_,yav_,yap_,y__; path p_;
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);
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
|