%Last modified: <iut_approx_poly.tex modifié par  Guillaume CONNAN le mercredi 16 janvier 2013 à 11h 35min 50s>
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\chapterimage{ouioui}
\chaptertext{Dans  les années  1960,  Pierre \textsc{Bézier},  ingénieur
  chez  Renault,  définit  une   méthode  permettant  de  modéliser  des
  carrosseries de voitures:  avec quelques données \textit{discrètes} il
  arrive à  représenter une  courbe \textit{continue} en  utilisant des
  polynômes qui  définissent de nouvelles courbes  faciles à paramétrer
  et  qui   coïncident  avec  les   courbes  initiales  en   un  nombre
  \textit{discret}  de   points.   Cette   méthode  a  été   reprise  en
  informatique par exemple pour la 
  construction  de fontes de  caractères, pour  le dessin  vectoriel sur
  des logiciels comme Blender, The Gimp, etc.}

\chapter{Approximations polynomiales}

\section{Formules de \textsc{Taylor}}

Nous ne chercherons pas à démontrer les formules suivantes.
${\mathcal{P}_{\mathcal{B},\mathcal{B}_2}}^{-1}$

\subsection{Formule de \textsc{Taylor-Lagrange}}

\begin{theoreme}
 Si $f$ est de classe $\mathcal{C}^{n}$ sur $\left[ a,b%
\right] $ et si $f^{(n+1)}$ existe sur $\left] a,b\right[ $ alors il existe
au moins un r\'{e}el $c\in \left] a,b\right[ $ tel que : 
\begin{equation*}
f(b)=\sum\limits_{k=0}^{n}\frac{\left( b-a\right) ^{k}}{k!}f^{(k)}(a)+\frac{%
\left( b-a\right) ^{n+1}}{(n+1)!}f^{(n+1)}(c)
\end{equation*}%
On dit que l'on a \'{e}crit la formule de Taylor Lagrange \`{a} l'ordre $n.$
\end{theoreme}

Il est souvent pratique de  réécrire cette formule en posant $b=a+h$. Le
nombre $c$ appartient  donc à l'intervalle $]a,a+h[$. Il  existe donc un
réel $\theta\in]0,1[$ tel que:

$$f(a+h)=\sum\limits_{k=0}^{n}\frac{h^{k}}{k!}f^{(k)}(a)+\frac{h^{n+1}}{(n+1)!}%
f^{(n+1)}(a+\theta h)$$


\subsection{Formule de Taylor-Mac Laurin}

Dans la formule de Taylor-Lagrange on remplace $b$ par $x$ et $a$ par $0.$
On obtient : 

\begin{theoreme}
$$f(x)=\sum\limits_{k=0}^{n}\frac{x^{k}}{k!}f^{(k)}(0)+\frac{x^{n+1}}{(n+1)!}%
f^{(n+1)}(\theta x)$$
\end{theoreme}



\subsection{Formule de Taylor avec reste int\'{e}gral}


Si $f$ est de classe $\mathcal{C}^{n+1}$ sur $I$ contenant $a$:

\begin{theoreme}
$$\forall x\in I,f(x)=\sum\limits_{k=0}^{n}\frac{\left( x-a\right) ^{k}}{k!}%
f^{(k)}(a)+\int\limits_{a}^{x}\frac{\left( x-t\right) ^{n}}{n!}f^{(n+1)}(t)dt$$
\end{theoreme}


\subsection{Formule de Taylor-Young.}

Si $f$ est de classe $\mathcal{C}^{n}$ sur un intervalle $I$ contenant $a$
alors : 


\begin{theoreme}
$$\forall x\in I,f(x)=\sum\limits_{k=0}^{n}\frac{\left( x-a\right) ^{k}}{k!}%
f^{(k)}(a)+o\left( (x-a)^{n}\right)$$
\end{theoreme}



\section{D\'{e}veloppements limit\'{e}s}


\subsection{Voisinage}

$a\in \mathbb{R},$ nous appellerons voisinage de $a$ toute partie de $%
\mathbb{R}$ contenant un intervalle ouvert contenant $a.$ L'intervalle $%
\left] a-\alpha ,a+\alpha \right[ ,$ avec $\alpha \in \mathbb{R}^{+\ast },$
est un voisinage de $a,$ nous le noterons $\mathcal{V}_{a}$ et $\mathcal{V}%
_{a}-\left\{ a\right\} $ sera not\'{e} $\mathcal{V}_{a}^{\ast }.$ Un
voisinage \`{a} droite de $a$ est un intervalle du type $\left] a,a+\alpha %
\right[ $ et $\left] a-\alpha ,a\right[ $ est un voisinage \`{a} gauche de $%
a.$ Dans ce qui suit nous ne distinguerons pas ces types de voisinages, en
cons\'{e}quence $\mathcal{V}_{a}^{\ast }$ pourra tout aussi bien aussi d\'{e}%
signer un voisinage \`{a} droite ou \`{a} gauche, lors des applications, le
contexte permettra de les distinguer. Un voisinage de $+\infty $ est un
voisinage du type $\left[ A,+\infty \right[ $ avec $A$ r\'{e}el positif
aussi grand que l'on veut que nous pourrons noter $\mathcal{V}_{+\infty
}^{\ast }$ ; $\left] -\infty ;-A\right] $ est un voisinage de $-\infty .$


\subsection{Définition}


\begin{definition}
   On dit que $f,$ d\'{e}finie sur $\mathcal{V}_{a},$ admet un
d\'{e}veloppement limit\'{e} d'ordre $n\in \mathbb{N}$ au voisinage de $a$
(on \'{e}crit en abr\'{e}g\'{e}: \og $f$ admet un $DL_{n}V(a)$\fg{}) s'il existe
un polyn\^{o}me $P_{n}\in \mathbb{R}_{n}\left[ X\right] $ (ensemble des polyn%
\^{o}mes de degr\'{e} inf\'{e}rieur ou \'{e}gal \`{a} $n)$ et une fonction $%
\varepsilon $ v\'{e}rifiant : 
\begin{equation*}
\left\{ 
\begin{array}{c}
\forall x\in \mathcal{V}_{a},f(x)=P_{n}(x-a)+(x-a)^{n}\varepsilon (x) \\ 
\varepsilon (a)=0 \\ 
\underset{x\rightarrow a}{\lim }\varepsilon (x)=0%
\end{array}%
\right.
\end{equation*}

\end{definition}



\subsection{Visualisation de l'approximation avec Sage}

Nous allons
créer une procédure  \textsf{Sage}{} qui donnera la partie  polynomiale d'un DL en
utilisant l'algorithme suivant:


\begin{algo}
\FUNC{DL}{\pfarg{f(x),n}{une expression, un entier}}{une expression polynomiale}
\BEGIN
\STATE{Der\recoit{} f (sous forme de fonction !)}
\STATE{Pol\recoit{} 0}
\FOR{k}{0}{n}
\STATE{Pol\recoit{} Pol+Der(0)$\times \frac{x^k}{k!}$}
\STATE{Der\recoit{} fonction dérivée de Der}
\ENDFOR
\RETURN{ Pol}
\END
\end{algo}


Ce qui donne en \textsf{Sage}{}:

\begin{lstlisting}[caption={}]
def DL(F,n):
    var('x')
    f(x) = F
    Der = f
    Pol = 0
    for k in range(n+1):
        Pol += Der(0)*x**k/factorial(k)
        Der = Der.derivative()
    return Pol
\end{lstlisting}


Par exemple:

\begin{lstlisting}[caption={}]
sage: DL(exp(x),5)
1/120*x^5 + 1/24*x^4 + 1/6*x^3 + 1/2*x^2 + x + 1
sage: DL(log(1+x),5)
1/5*x^5 - 1/4*x^4 + 1/3*x^3 - 1/2*x^2 + x
\end{lstlisting}


On peut utiliser  la fonction \verb+DL+ pour avoir  un ordre de grandeur
de l'approximation 
pour différentes fonctions et différentes valeurs de $x$.
On utilisera à bon escient la méthode \verb+subs+:


\begin{lstlisting}[caption={}]
sage: DL(exp(x),5).subs(x == 0.00001)
1.00001000005000
sage: [DL(log(1+x),5).subs(x==10.**(-k)) - log(1+10.**(-k)) for k in range(5) ]
[0.0901861527733880, 1.53529008409259e-7, 1.65241084704171e-13, 1.10154940724527e-16, 1.10182045778839e-17]
\end{lstlisting}

\begin{remarque}
Il  existe une  commande \textsf{Sage}{}  qui donne  directement  le développement
limité d'une fonction:

\begin{lstlisting}[caption={}]
sage: taylor(log(1+x),x,0,5)
1/5*x^5 - 1/4*x^4 + 1/3*x^3 - 1/2*x^2 + x
\end{lstlisting}

mais c'est moins drôle...

\end{remarque}


Nous allons maintenant créer des petits dessins animés qui permettent de
visualiser la convergence progressive des DL vers la fonction initiale.

\begin{lstlisting}[caption={}]
def anim_DL(f,p,xm,xM,ym,yM,d):
    P = plot(f,rgbcolor='red',xmin=xm,xmax=xM,ymin=ym,ymax=yM,thickness=3,
                                                              linestyle='--')
    a = animate([[P,DL(f,k)] for k in range(1,p)],xmin=xm,xmax=xM,ymin=ym,ymax=yM)
    a.show(delay=d) # délai en 100e de seconde entre deux images.
\end{lstlisting}

Tentez:

\begin{lstlisting}[caption={}]
sage: anim_DL(log(1+x),20,-1,2,-2,2,50)
sage: anim_DL(cos(x),30,-4*pi,4*pi,-1.1,1.1,50)
\end{lstlisting}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% E X E R C I C E S
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\vfill

\eject

\modeexercice % entre en mode exercice
\section{Exercices}

\begin{exercice}
\'{E}crire la formule de Taylor-Mac Laurin et la formule de Taylor-Young 
\`{a} l'ordre $n$  pour les fonctions suivantes et  dans un voisinage de
0:

\begin{multicols}{3}

\begin{enumerate}
\item $f(x)=\text{e}^{x}$

\item $f(x)=\dfrac{1}{1+x}$

\item $f(x)=\dfrac{1}{1-x}$

\item $f(x)=\ln (1+x)$

\item $f(x)=\sin \left( x\right) $

\item $f(x)=\sqrt{1+x},$ $n=4$
\end{enumerate}

\end{multicols}

\end{exercice}

\begin{exercice}
Donner un $DL_{3}V(0)$ pour les fonctions suivantes :
\begin{multicols}{2}
\begin{enumerate}
\item $f_{1}(x)=\ln (1+x),g(x)=f_{1}(x^{2})$

\item $f_{2}(x)=\text{e}^{x},h(x)=f_{2}(-2x)$

\item $f_{3}(x)=f_{1}(x)f_{2}(x)$

\item $f_{4}(x)=f_{1}(x)+f_{2}(x)$
\end{enumerate}
\end{multicols}
\end{exercice}

\begin{exercice}[Polynôme interpolateurs de \textsc{Lagrange}]



  
D'un point de vue abstrait, on pourrait se contenter de dire que si on ne connaît que quelques points
de la courbe représentative  d'une fonction inconnue, on cherche à approcher  cette fonction par une
fonction polynomiale  passant par  ces points.  Intuitivement, on peut  penser que  plus on  aura de
points de contrôles, meilleures sera l'approximation  mais les mathématiques vont venir une nouvelle
fois contredire notre intuition.

D'un point  de vue  plus concret, on  voudrait reconstituer  un organe humain  à partir  de quelques
mesures  prises en  imagerie médicale  ou reconstituer  une couche  géologique à  partir  de mesures
sismiques~:~on est alors amené  à reconstituer une formes à partir de nuages  de points, en 3D cette
fois.

Ces problèmes sont très courants en informatique. Nous nous contenterons bien sûr ici d'un survol de
quelques méthodes très  simples dans des cas théoriques  eux aussi assez
triviaux.

\bigskip


On considère $n$ points de coordonnées $(x_1,y_1)\dots(x_n,y_n)$
On veut trouver un polynôme P tel que $P(x_i)=y_i$ pour tout $i\in [\![1\pv n]\!]$. 

Une petite activité mathématique consiste à prouver que l'unique polynôme de degré $n-1$, solution du problème, est
défini par 

\[ P(x)=\sum_{k=1}^ny_k \LR_k(x)\quad \text{avec} \quad\LR_k(x)=\frac{\ds\prod_{i=1, i\neq
k}^{i=n}(x-x_i)}{\ds\prod_{i=1, i\neq k}^{i=n}(x_k-x_i)}\]


Bon, ça fait peur comme ça, mais ce n'est pas si terrible...

\textit{Déterminez  par  exemple  \og  à  la main\fg{}  le  polynôme  de
  Lagrange   passant    par   les   points    $A(1,2)$,   $B(2,-1)$   et
  $(3,2)$. Vérifiez qu'on obtient bien $P(1)=2$, $P(2)=-1$ et $P(3)=2$.}

Avec \textsf{Sage}{}, c'est évidemment plus facile...


\begin{lstlisting}[caption={}]
R = PolynomialRing(QQ, 'x') # on travaille dans Q[X]
f = R.lagrange_polynomial([(1,2),(2,-1),(3,2)])
\end{lstlisting}


On peut même visualiser la courbe avec les points de contrôle:

\begin{lstlisting}[caption={}]
def lagrange_plot(L):
    R = PolynomialRing(QQ, 'x')
    f = R.lagrange_polynomial(L)
    G = Graphics()
    G = plot(f(x),xmin=L[0][0]-1,xmax=L[-1][0]+1)
    for k in range(len(L)):
        G += point(L[k])
    G.show()
\end{lstlisting}


On veut à présent visualiser l'approximation du graphe d'une fonction par des polynômes de Lagrange
successifs en augmentant les points de contrôle.

On va par exemple prendre une subdivision régulière de l'intervalle et on augmentera le nombre de
points  de  contrôles  pour  observer  si  l'approximation  s'en  trouve
améliorée.


{\it
Construisez une animation de l'approximation de la fonction
$x\mapsto \frac{1}{1+x^2}$  sur $[-5\pv 5]$ avec  comme séries successives d'abscisses  de points de
contrôle des subdivisions régulières de l'intervalle $[-5\pv 5]$.

Faites de même pour $x\mapsto ln(1+x)$ en adaptant les intervalles. 

On  a bien sûr  envie de  généraliser: créez  une fonction  \textsf{Sage}{} idoine
\verb+lagrange_fonc((F,n,xm,xM,ym,yM))+.
}


Observez ce que cela donne:

\begin{lstlisting}[caption={}]
sage : lagrange_fonc(1/(1+t^2),40,-5,5,-0.2,1.2)
sage : lagrange_fonc(ln(1+t),20,0,5,-2,3)
\end{lstlisting}


Bref, ce  n'est pas aussi  magique qu'il n'y paraissait  : plus on  augmente le nombre de  points de
contrôle, plus les \og effets de bord\fg deviennent gênants. 

Vous prouverez peut-être un jour que si $f$ est définie sur un intervalle I, si la suite des dérivées successives de $f$ est uniforméméent
bornée et  si l'on fait tendre le  nombre de points de  contrôle vers $+\infty$, alors  la suite des
interpolateurs de Lagrange de $f$ converge  \emph{uniformément} vers $f$ sur tout segment $[a; b]$
inclus dans I lorsque $n$ tend vers $+\infty$.

 Ça n'a malgré
tout que peu  d'intérêt car ces conditions sont  trop restrictives et de toute façon,  la formule de
Taylor-Lagrange nous donne ce qu'il faut pour de telles fonctions.


Il y a bien sûr des approximations plus intéressantes 

\begin{itemize}
\item  par les  polynômes de Bernstein définis par
$B_n(x)=\displaystyle\sum_{k=0}^n{n\choose k}f \left(\frac{k}{n}\right)x^k(1-x)^{n-k}$ pour des fonctions
continues sur un segment

\item  par  des polynômes  trigonométriques  dans  des  cas encore  plus
  généraux en étudiant les séries de Fourier...
\end{itemize}

\end{exercice}


\begin{exercice}[Courbes de \textsc{Bézier}]

\ill{Dans  les  années 60,  les  ingénieurs  Pierre  \textsc{Bézier} et  Paul
\textsc{De  Casteljau}   travaillant  respectivement  chez   Renault  et
Citroën, réfléchissent  au moyen de  définir de manière la  plus concise
possible la forme d'une carrosserie.

Le  principe  a été  énoncé  par  \textsc{Bézier}  mais l'algorithme  de
construction  par  son  collègue  de  la marque  aux  chevrons  qui  n'a
d'ailleurs été dévoilé  que bien plus tard, la  loi du secret industriel
ayant primé sur le développement scientifique...


Pour la  petite histoire, alors  que Pierre \textsc{Bézier}  (diplômé de
l'\textsc{Ensam}  et  de \textsc{Supélec}),  à  l'origine des  premières
machines à commandes  numériques et de la \textsc{Cao}  ce qui n'empêcha
pas sa  direction de le mettre  à l'écart: il se  consacra alors presque
exclusivement aux
mathématiques  et à  la  modélisation  des surfaces  et  obtint même  un
doctorat en 1977.}{pierre_bezier}

 Paul
\textsc{De Casteljau} était lui un mathématicien d'origine, ancien élève
de la  Rue d'\textsc{Ulm}, qui a  un temps été  employé par l'industriel
automobile. 


Aujourd'hui, les courbes de Bézier sont très utilisées en informatique.

Une Courbe de Bézier est une courbe paramétrique aux extrémités imposées
avec des points de contrôle qui définissent les tangentes à cette courbe
à des instants donnés.


\textbf{Algorithme de Casteljau}



Soit $t$ un  paramètre de l'intervalle $[0,1]$ et  $P_1$, $P_2$ et $P_3$
les trois points de contrôle. 

On    construit     le    point    $M_1$     barycentre    du    système
$\left\{(P_1,1-t),(P_2,t)\right\}$    et   $M_2$   celui    du   système
$\left\{(P_2,1-t),(P_3,t)\right\}$. 

On   construit   ensuite   le   point   $M$,   barycentre   du   système
$\left\{(M_1,1-t),(M_2,t)\right\}$.

Exprimez M comme barycentre des trois points $P_1$, $P_2$ et $P_3$.

Faites la construction à la main avec $t=1/3$ par exemple.

Voici ce que cela donne en \textsf{Sage}{}:


\begin{lstlisting}[caption={}]
def bezier1(P):
    G = Graphics()
    for i in range(len(P)):
        G += point(P[i],rgbcolor='green')
    var('k')
    m1(k) = map(lambda x,y : (1-0.01*k)*x + 0.01*k*y,P[0],P[1])
    m2(k) = map(lambda x,y : (1-0.01*k)*x + 0.01*k*y,P[1],P[2])
    m(k) = map(lambda x,y : (1-0.01*k)*x + 0.01*k*y,m1,m2)
    for t in range(101):
        G += point(m(t),rgbcolor='blue')
    a = animate([[G,line([m1(j),m2(j)],color='red')] for j in range(101)] )
    a.show()
\end{lstlisting}



Nous allons assimiler les points $M_1$, $M_2$ et $M$ à des courbes paramétrées. 

Ainsi  $M_1(t)=(1-t)P_1+tP_2$, $M_2(t)=(1-t)P_2+tP_3$ puis

$$M(t)=(1-t)M_1(t)+tM_2(t)=(1-t)^2P_1+2t(1-t)P_2+t^2P_3$$

Vérifiez que $M'(t)=2(M_2(t)-M_1(t))$. Comment l'interpréter~?

\medskip

\textbf{Avec 4 points de contrôle}


Faites une étude similaire (\og à la main\fg{}) avec 4 points de contrôle.

On pourra introduire les polynômes de Bernstein définis par~:

$$B_j^n(t)=\binom{n}{j}t^j(1-t)^{n-j}$$

et utiliser une représentation similaire aux arbres de probabilité.



Créez une procédure \verb+bern(j,n,t)+ qui calcule $B_j^n(t)$.

Commentez le script suivant:



\begin{lstlisting}[caption={}]
def bezier3(P):
    G = Graphics()
    Vi = line([P[0],P[1]],color='green')
    Vf = line([P[2],P[3]],color='green')
    G = point(P[0]) + point(P[3]) + Vi + Vf
    for k in range(1,100):
        M = map(lambda x,y,z,u : bern(0,3,0.01*k)*x + bern(1,3,0.01*k)*y + bern(2,3,0.01*k)*z + bern(3,3,0.01*k)*u,P[0],P[1],P[2],P[3])
        G += point(M)
    G.show()
\end{lstlisting}



et testez:

\begin{lstlisting}
bezier3([[0,0],[1,0],[3,-3],[3,0]]);
\end{lstlisting}


Quel est le rôle des points de contrôle 2 et 3?

\medskip


\textbf{Courbe de Bézier du 3\up{e}  degré avec un nombre quelconque de
  points de contrôle}


Il est   pratique  de travailler avec  des polynômes de  degré trois
pour avoir droit à des points d'inflexion.


Augmenter  le  nombre  de  points  de contrôle  implique  a  priori  une
augmentation du degré de la fonction polynomiale.

Pour remédier à  ce problème, on découpe une  liste quelconque en liste
de listes de 4 points. 

Cependant, cela  est insuffisant pour obtenir un  raccordement de classe
$\CR^1$  (pourquoi~? pourquoi est-ce  important d'avoir  un raccordement
de classe $\CR^1$~?)


Pour assurer la  continuité tout court, il faut que  le premier point d'un
paquet soit le dernier du paquet précédent.

Le dernier \og vecteur  vitesse\fg{} de la liste $[P_1,P_2,P_3,P_4]$ est
$\ve{P_3P_4}$. Il  faut donc que ce  soit le premier  vecteur vitesse du
paquet suivant pour assurer la continuité de la dérivée.

Appelons provisoirement le paquet suivant $[P_1',P_2',P_3',P_4']$. On a 
d'une part $P_1'=P_4$
et           d'autre          part          $\ve{P_3P_4}=\ve{P_1'P_2'}$,
i.e. $P_2'=P_4+\ve{P_3P_4}$.

On a donc $P_3'=P_5$ et $P_4'=P_6$.


Connaissant  \verb+bezier3+,  construire  une  procédure qui  trace  une
courbe de Bézier cubique avec un nombre quelconque de points de contrôle
(on prendra un nombre pair de points pour se simplifier la vie).

Testez avec  $[[1, 1], [2, 3], [5, 5], [6, 2], [7, 7], [10, 5], [10, 2], [8, 0], [4, 0], [5, 1]]$.

C'est bientôt la Saint-Valentin alors
dessinez un c\oe ur....

\medskip

\textbf{B-splines uniformes}

Tout ceci est  très beau mais il  y a un hic: en changeant  un point de
contrôle, on modifie grandement la figure.




On considère $m$ n\oe uds $t_0,t_1n,\cdots,t_m$ de l'intervalle $[0,1]$.




Introduisons une nouvelle fonction~:

$$\mathbf{S}(t)= \sum_{i=0}^{m-n-1} \mathbf{P}_{i} b_{i,n}(t) \mbox{ , } t \in [0,1]$$


 les $P_i$ étant les points de contrôle et les fonctions $b_{j,n}$ étant
 définies récursivement par 

$$  b_{j,0}(t)  =  \left\{\begin{matrix}  1  &  \text{si}  \quad  t_j
    \leqslant t < t_{j+1} \\ 0 & \text{sinon} \end{matrix} \right.$$

et pour $n\se 1$

$$    b_{j,n}(t) = \frac{t - t_j}{t_{j+n} - t_j} b_{j,n-1}(t) + \frac{t_{j+n+1} - t}{t_{j+n+1} - t_{j+1}} b_{j+1,n-1}(t). $$

On ne  considérera par  la suite que  des n\oe  uds équidistants~:~ainsi
on aura $t_k=\frac{k}{m}$.

On  parle  de B-splines  uniformes  et  on  peut simplifier  la  formule
précédente en remarquant également des invariances par translation.


À l'aide des formules précédentes, on  peut prouver que dans le cas de 4
points de contrôles on obtient~:

$$S(t)=\frac{1}{6}\Big((1-t)^3P_0+(3t^3-6t^2+4)P_1+(-3t^3+3t^2+3t+1)P_2+t^3P_3\Big)$$


Calculez $S(0)$, $S(1)$ puis $S'(0)$ et $S'(1)$:~que peut-on en conclure~?

Reprenez l'étude faite avec les courbes de Bézier et comparez les résultats: obtiendrez-vous un plus joli c\oe ur?



\end{exercice}


\modenormal
%%% Local Variables: 
%%% TeX-master: "poly_info2_asymptotic"
%%% End: 
