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
© Copyright 2024