ATLAS Ouvrir dans l'atlas →

ExerciceMaths Sup – MPSI, chapitre 9 — Dérivabilité et convexité · Fonctions convexes

Exercice 42

AlgorithmiqueDémonstration

Algorithme de trichotomie. Soit f:[a ,b]→ℝf : [a\,,b] \to \mathbb{R} convexe et continue. On pose a1=2a+b3a_{1} = \frac{2a + b}{3}, a2=a+2b3a_{2} = \frac{a + 2b}{3}, et μ=f(a2)−f(a1)a2−a1\mu = \dfrac{f(a_{2}) - f(a_{1})}{a_{2} - a_{1}}.

1. Si μ⩾0\mu \geqslant 0, montrer que ff atteint son minimum sur [a ,b][a\,,b] en un point de [a ,a2][a\,,a_{2}]. Si μ⩽0\mu \leqslant 0, montrer qu'il l'atteint en un point de [a1 ,b][a_{1}\,,b].

2. Écrire une fonction Python trichotomie(f, a, b, eps) qui renvoie un encadrement d'amplitude inférieure à eps d'un point où ff atteint son minimum.

3. Appliquer à x↦ex+x2x \mapsto \mathrm{e}^{x} + x^{2} sur [−1 ,0][-1\,,0]. Combien d'étapes faut-il pour une amplitude de 10−610^{-6} ?

Corrigé

1. Supposons μ⩾0\mu \geqslant 0, et soit x∈ ]a2 ,b]x \in \,]a_{2}\,,b]. Le lemme des trois pentes (proposition 8), appliqué à a1<a2<xa_{1} < a_{2} < x, donne f(x)−f(a2)x−a2⩾f(a2)−f(a1)a2−a1=μ⩾0,\frac{f(x) - f(a_{2})}{x - a_{2}} \geqslant \frac{f(a_{2}) - f(a_{1})}{a_{2} - a_{1}} = \mu \geqslant 0, donc f(x)⩾f(a2)f(x) \geqslant f(a_{2}). La fonction continue ff atteint son minimum sur le segment [a ,a2][a\,,a_{2}] en un point cc (chapitre 8), et f(c)⩽f(a2)⩽f(x)f(c) \leqslant f(a_{2}) \leqslant f(x) pour tout x>a2x > a_{2} : cc réalise le minimum sur [a ,b][a\,,b]. Si μ⩽0\mu \leqslant 0, le lemme appliqué à x<a1<a2x < a_{1} < a_{2} donne de même f(a1)−f(x)a1−x⩽μ⩽0\frac{f(a_{1}) - f(x)}{a_{1} - x} \leqslant \mu \leqslant 0, donc f(x)⩾f(a1)f(x) \geqslant f(a_{1}) pour x<a1x < a_{1}, et le minimum est atteint sur [a1 ,b][a_{1}\,,b]. μ⩾0:minimum sur [a ,a2];μ⩽0:minimum sur [a1 ,b]\boxed{\mu \geqslant 0 : \text{minimum sur } [a\,,a_{2}] ; \quad \mu \leqslant 0 : \text{minimum sur } [a_{1}\,,b]}

2. À chaque étape, on élimine un tiers du segment, et l'amplitude est multipliée par 23\frac{2}{3}. Le signe de μ\mu est celui de f(a2)−f(a1)f(a_{2}) - f(a_{1}) :

def trichotomie(f, a, b, eps):
    n = 0                       # nombre d'etapes
    while b - a >= eps:
        a1 = (2*a + b) / 3
        a2 = (a + 2*b) / 3
        if f(a2) >= f(a1):      # mu >= 0 : minimum dans [a, a2]
            b = a2
        else:                   # mu < 0 : minimum dans [a1, b]
            a = a1
        n += 1
    return a, b, n

L'invariant de boucle est « ff atteint son minimum sur [a ,b][a\,,b] en un point du segment courant », conservé d'après la question 1, et la boucle termine puisque l'amplitude tend vers 00.

3. La fonction x↦ex+x2x \mapsto \mathrm{e}^{x} + x^{2} est convexe, de dérivée seconde ex+2>0\mathrm{e}^{x} + 2 > 0. Après nn étapes, l'amplitude vaut (23)n\big(\frac{2}{3}\big)^{n}, et (23)n<10−6  ⟺  n>6ln⁡10ln⁡3−ln⁡2≈34,07.\Big(\frac{2}{3}\Big)^{n} < 10^{-6} \iff n > \frac{6\ln 10}{\ln 3 - \ln 2} \approx 34{,}07.

35 eˊtapes\boxed{35 \text{ étapes}} L'appel trichotomie(lambda x: exp(x) + x**2, -1, 0, 1e-6) renvoie bien 3535 étapes et un encadrement de −0,351734-0{,}351734, qui est la solution de ex+2x=0\mathrm{e}^{x} + 2x = 0, où s'annule la dérivée. La dichotomie du chapitre 8 aurait demandé 2020 étapes : la trichotomie, qui n'élimine qu'un tiers à chaque fois, est plus lente, mais elle ne demande pas de connaître la dérivée.

Ouvrir dans l'atlas interactif →