TD n°1 - Algorithmes
Encadrer la solution d’une équation
Objectif
Concevoir des algorithmes permettant d’encadrer la solution d’une équation du typef(x)=0, où f est une fonction connue.
Première partie
Algorithmes de balayage
Exercice 1.
On considère la fonctionf définie sur [−2; 10] par :f(x)=x3−6x2+6.
1. Étudier les variations def sur [−2; 10]
2. Montrer que l’équationf(x)=0 admet 3 solutions sur [−2; 10].
Une solution uniqueαsur cet [−2; 0],βsur cet [0; 4] etγsur [4; 10]. Voici le tableau de variations attendu.
x Signe de f′(x)
Variations de f
−2 0 4 10
+ 0 −
−26
−26
66
−26
−26
406 406 α
0
β
0
γ
0
3. Donner un encadrement à 0,01 près deα,βetγpar balayage avec la calculatrice.
Commencer avec un pas de 0,1 puis affiner la recherche.
Pourαpar exemple, dans le tableau de valeurs de la fonctionf, fixer d’abord le pas d’incrémentation à 0,1 pour faire émerger rapidement les valeurs (−1) et (−0,9).
Ensuite, modifier le pas d’incrémentation à 0,01 pour obtenir l’encadrement souhaité.
Aide
TD n°1 - Algorithmes - Encadrer la solution d’une équation
4. Voici une fonctionbal1, de paramètrepetaoùpest la précision souhaitée, (icip=0,01), etale début du balayage (icia=0). Écrivez cette fonction sous python et retrouver l’encadrement deαde la question (2.).
Aide : on pourra définir la fonction f indépendamment.
Fonction bal1(p,a)
’ ’ ’In : p le pas, a le début du balayage, f la fonction supposée croissante Out : un encadrement d’une solution de f(x)=0’ ’ ’
p as=p x=a y=f(x)
Tant quey<0 Faire x←x+p as y←f(x) Fin Tant que
Envoyer (x−p as,x)
Pseudo Code
5. Vous devez obtenir un affichage de ce type, qui est du à la gestion des flottants par tous les ordinateurs :
> bal1(0.01,-2)
(-0.9399999999999991, -0.929999999999999)
On peut modifier l’affichage en arrondissant les résultats affichés avec la fonction round. Par exemple fixer un arrondi à 10−5près, cela conviendra pour la plupart des exercices.
round(b, n) va renvoyer l’arrondie debà 10−nprès.
Par exemple : round(2.2563 , 2) => 2.26
round(b , n)
6. Retrouver l’encadrement avec votre programme deγ, solution def(x)=0 sur [4; 10].
7. Essayer votre programme pour retrouver l’encadrement deβ, solution def(x)=0 sur [0; 4]. Le programme ne convient pas, expliquer pourquoi.
8. Écrire une fonctionbal2(p,a)qui permet de trouver un encadrement de la solution dans le cas où la fonction est décroissante.
9. Écrire une fonctionbal_general(p,a)donnant un encadrement de la solution, quelque soit la monotonie de f.
Deux nombres sont de signes opposés si leur produit est négatif.
Aide
Pour la résolution de l’équation f(x)=k, il suffit d’appliquer l’algorithme à la fonctiong définie parg(x)=f(x)−k
Remarque
www.math93.com / M. Duffaud 2/3
TD n°1 - Algorithmes - Encadrer la solution d’une équation
Exercice 2.
1. L’inconvénient est que l’algorithme précédent effectue un grand nombre de fois fois la boucle « Tant Que ». Com- bien de fois exactement dans notre configuration pour l’encadrement deα?
2. On peut l’améliorer en effectuant d’abord un balayage avec un pas de 0,1, puis de 0,01, puis de 0,001 ...
Écrire une fonctionbal_rapide(p,a)qui répond à ce problème en appelant la fonctionbal_general(p,a). 3. Complément
Pour évaluer le temps de calcul des deux fonctions, importer le module time. Voici un moyen de procéder :
import time a=4
p=0.00001
#
t=time.time() # la variable t prend le temps de l'horloge de l'ordinateur print(bal_general(p,a))
t2=time.time()
print('Temps pour bal_general = ', t2-t) # on affiche la différence entre
# le temps de l'horloge avant et après l'exécution
t=time.time()
print(bal_rapide(p,a)) t2=time.time()
print('Temps pour bal_rapide = ',t2-t)
Ce qui donne (le temps va dépendre de votre ordinateur et de votre connexion sur repl) : (5.82305, 5.82306)
Temps pour bal_general = 0.4446842670440674 (5.82305, 5.82306)
Temps pour bal_rapide = 8.988380432128906e-05
[ Fin du devoir \
www.math93.com / M. Duffaud 3/3