TP 09 : Méthodes de dichotomie et de Newton

PTSI2 – 2014/2015 – Info
Lycée La Martinière-Monplaisir – Lyon
TP 9. Méthodes de dichotomie et de Newton.
Le but de ce TP est de programmer quelques méthodes de recherche d’un zéro d’une fonction f .
1
Une fonction qui servira comme exemple
On considère la fonction polynomiale définie par :
P (x) = x3 − 4x2 + 2x + 1
On définit :
def P(x):
return (x**3 - 4*x**2 + 2*x + 1)
1◦ ) Représenter cette fonction sur [−1, 6].
2◦ ) Afficher la phrase "la valeur de P en i est P(i)" pour tout entier i entre −1 et 6.
En déduire que P s’annule au moins une fois entre 3 et 4.
On souhaite déterminer une valeur approchée à 10−6 près de ce zéro, que l’on notera `.
2
Un premier essai
On propose la fonction suivante :
def zero(f, a, b, epsilon):
"""Renvoie une valeur approchée à <epsilon> près
du zéro de f compris entre a et b"""
x = a
while f(x) != 0:
x += epsilon
return (x)
Décrire l’algorithme implanté par cette fonction. Est-il correct ?
Le modifier pour le rendre correct, et l’utiliser avec P pour déterminer une valeur approchée de ` à
10−6 près. Combien d’itérations ont été nécessaires pour ce calcul ?
3
Algorithme de dichotomie
Peut-on savoir a priori le nombre d’itérations nécessaires pour avoir une valeur approchée à 10−6 près
de ` avec l’algorithme de dichotomie appliqué à P ?
Définir la fonction zero_dichotomie d’arguments f, a, b, epsilon mettant en œuvre cet algorithme
pour une fonction f quelconque.
Vérifier le nombre d’itérations effectuées avec P .
1
4
Méthode de Newton
La méthode de Newton consiste à calculer les termes successifs de la suite récurrente :

x0
f (x )
xn+1 = xn − 0 n
f (xn )
1◦ ) Admis : lorsque, pour tout x ∈ [a, b], f 0 (x) > 0 et f 00 (x) > 0, en partant de x0 supérieur au zéro
f (xn )
`, la suite (xn )n∈N converge vers ` et on a, pour tout n, 0 6 xn − ` 6 0
.
f (`)
En déduire un test d’arrêt utilisable de la méthode de Newton :
Définir la fonction zero_newton d’arguments f, df, x0, epsilon implantant l’algorithme de
Newton pour une fonction f quelconque.
Tester avec la fonction P , en prenant soin de définir auparavant :
def dP(x):
return (3*x**2-8*x+2)
Indiquer le nombre d’itérations nécessaires pour obtenir une valeur approchée de ` à 10−6 près à
partir de la valeur x0 = 4.
2◦ ) La méthode de Newton nécessite la connaissance de la dérivée de f . Ce n’est pas toujours chose
facile si l’expression de f est compliquée. Cela peut même être impossible lorsque l’expression de
f n’est pas connue, et qu’on ne connaît que les valeurs de f (valeurs expérimentales par exemple).
Il faut donc alors approcher f 0 à l’aide des valeurs de f .
a) En supposant la fonction f « suffisamment » régulière, déterminer, grâce à la formule de
f (x0 + h) − f (x0 )
Taylor-Young, un développement limité de la différence
− f 0 (x0 ), lorsque
h
h tend vers 0.
b) Ecrire une fonction eval_derivee d’arguments f, x0, h donnant une valeur approchée de
f 0 (x0 ).
c) Proposer une illustration graphique permettant de tester et vérifier le résultat de la question
2a, pour les fonction exp, sin et P , en x0 = 0.
1
On utilisera les valeurs de h = k pour k entre 10 et 20.
2
d) Ecrire alors une fonction zero_newton_bis d’arguments f, x0, epsilon implémentant la
méthode de Newton sans utiliser l’expression exacte de la dérivée.
5
Représentation de polynômes et recherche des zéros
Un polynôme est défini par la donnée de ses coefficients. Il suffit donc de stocker en mémoire la liste
de ces coefficients. Ainsi, pour représenter le polynôme 1 + 2x − 4x2 + x3 , on pose :
p = [1, 2, -4, 1]
1◦ ) Définir une fonction evaluation(p, x) qui renvoie l’évaluation en x du polynôme représenté par
p.
2◦ ) Écrire, dans ce cadre, une fonction derive(p) qui renvoie la représentation du polynôme dérivé.
2
3◦ ) Lorsque le polynôme est de degré 2, et qu’il a deux racines réelles, nous connaissons les formules
donnant les valeurs de ses racines. Définir une fonction racines_2(p) qui calcule ces deux racines,
et qui renvoie les valeurs sous forme d’un tuple classé dans l’ordre croissant. On supposera que
le coefficient dominant est positif.
4◦ ) Considérant un polynôme de degré 3, à coefficient dominant positif, et possédant trois racines
réelles, on souhaite déterminer une valeur approchée de ces trois racines.
a) Comment utiliser la fonction zero_dichotomie avec cette représentation des polynômes ?
b) Pour utiliser la recherche dichotomique, il est nécessaire de commencer par encadrer le zéro
que l’on recherche. Plutôt qu’utiliser une analyse graphique comme précédemment, on peut
remarquer que l’un des zéros est encadré par les racines b et c de P 0 . Proposer un algorithme
permettant de déterminer, à partir de b et c, des valeurs de a et d tels que les deux autres
racines soient encadrées par a et b (resp. c et d).
c) Écrire une fonction racines_3(p, epsilon) qui renvoie une valeur approchée à epsilon
près des trois racines du polynôme représenté par p.
3