ATLAS Ouvrir dans l'atlas →

ExerciceTerminale, chapitre 3 — Fonctions numériques · Continuité et théorème des valeurs intermédiaires

Exercice 26 Python

Algorithmique

On reprend la fonction ff de l'exercice 24, définie par f(x)=x3+3x−5f(x)=x^{3}+3x-5, et l'on cherche à approcher sa racine α\alpha. On dispose du script suivant :

def f(x):
    return x**3 + 3*x - 5

def balayage(a, b, p):
    x = a
    while f(x) < 0:
        x = x + p
    return x - p, x

1. Que renvoie l'appel balayage(1, 2, 0.1) ? Interpréter le résultat.

2. Pourquoi la boucle while s'arrête-t-elle nécessairement ? Quelle propriété de ff établie à l'exercice 24 le garantit ?

3. Comment modifier l'appel pour obtenir un encadrement de α\alpha d'amplitude 10−310^{-3} ?

4. Le paramètre b n'est jamais utilisé dans la fonction balayage. Proposer une modification du script qui l'utilise, de façon à éviter une boucle infinie si la fonction ne s'annulait pas sur [a ;b][a\,;b].

5. Combien de valeurs de xx la fonction balayage teste-t-elle, au maximum, pour un pas p=10−3p=10^{-3} sur l'intervalle [1 ;2][1\,;2] ? Et pour p=10−6p=10^{-6} ? Ce procédé vous semble-t-il économe ?

Corrigé

1. La variable x part de 11 et progresse de 0,10{,}1 tant que f(x)f(x) reste strictement négative : f(1)=−1<0→f(1,1)≈−0,369<0→f(1,2)≈0,328>0  : arreˆtf(1)=-1<0 \quad\to\quad f(1{,}1)\approx -0{,}369<0 \quad\to\quad f(1{,}2)\approx 0{,}328>0 \ \text{ : arrêt} La fonction renvoie alors le couple (x - p, x)\texttt{(x - p, x)}, soit : balayage(1, 2, 0.1) renvoie (1,1 ;1,2)\boxed{\texttt{balayage(1, 2, 0.1)} \text{ renvoie } (1{,}1\,;1{,}2)} ce qui signifie que α\alpha appartient à l'intervalle [1,1 ;1,2][1{,}1\,;1{,}2].

Remarque d'informatique : en pratique, Python affichera plutôt

(1.1000000000000003, 1.2000000000000004)

Les nombres décimaux sont codés de façon approchée en machine, et l'accumulation d'additions de 0,10{,}1 fait apparaître ces écarts minuscules. Cela ne change rien à l'interprétation mathématique.

2. La boucle s'arrête parce que ff est strictement croissante et tend vers +∞+\infty : au-delà de α\alpha, ff est strictement positive. Comme x augmente de p>0p>0 à chaque tour, elle finit par dépasser α\alpha en un nombre fini d'étapes, et la condition f(x) < 0 devient alors fausse. C'est la stricte croissance établie à l'exercice 24 qui garantit qu'une fois la condition devenue fausse, elle le reste — sans elle, la boucle pourrait s'arrêter sur un changement de signe qui n'est pas le bon.

3. Il suffit de réduire le pas : balayage(1, 2, 0.001)\boxed{\texttt{balayage(1, 2, 0.001)}}

4. On ajoute la condition d'arrêt sur b :

def balayage(a, b, p):
    x = a
    while f(x) < 0 and x <= b:
        x = x + p
    if x > b:
        return None      # aucun changement de signe detecte sur [a ; b]
    return x - p, x

5. Sur [1 ;2][1\,;2] avec un pas p=10−3p=10^{-3}, la boucle teste au maximum 2−110−3=1 000 valeurs\frac{2-1}{10^{-3}}=\boxed{1\,000 \text{ valeurs}} et pour p=10−6p=10^{-6}, jusqu'à 1 000 000 valeurs\boxed{1\,000\,000 \text{ valeurs}}.

Ce procédé n'est pas économe du tout : pour gagner un chiffre décimal, il faut multiplier le nombre de calculs par 1010. C'est précisément ce que la dichotomie va corriger.

Dans l'édifice

Thèmes

dichotomie, valeur approchée, Python

Ouvrir dans l'atlas interactif →