ExerciceTerminale, chapitre 3 — Fonctions numériques · Continuité et théorème des valeurs intermédiaires
Exercice 26 Python
On reprend la fonction de l'exercice 24, définie par , et l'on cherche à approcher sa racine . 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, x1. 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 établie à l'exercice 24 le garantit ?
3. Comment modifier l'appel pour obtenir un encadrement de d'amplitude ?
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 .
5. Combien de valeurs de la fonction balayage teste-t-elle, au maximum, pour un pas sur l'intervalle ? Et pour ? Ce procédé vous semble-t-il économe ?
Corrigé
1. La variable x part de et progresse de tant que reste strictement négative : La fonction renvoie alors le couple , soit : ce qui signifie que appartient à l'intervalle .
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 fait apparaître ces écarts minuscules. Cela ne change rien à l'interprétation mathématique.
2. La boucle s'arrête parce que est strictement croissante et tend vers : au-delà de , est strictement positive. Comme x augmente de à chaque tour, elle finit par dépasser 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 :
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, x5. Sur avec un pas , la boucle teste au maximum et pour , jusqu'à .
Ce procédé n'est pas économe du tout : pour gagner un chiffre décimal, il faut multiplier le nombre de calculs par . C'est précisément ce que la dichotomie va corriger.