BCPST2
95 0 2 Méthode de Newton
Le but de la méthode de newton est de déterminer de manière approchée les solutions d'une équation
f(x) = 0
On considère dans la suite une fonction dérivable dénie sur un intervalle I dans R.
x0 x3 x2 x1
On part d'un point de l'intervalle, si possible pas trop éloigné de la position de la solution recherchée, que l'on notera dans la suitexs. L'idée est d'approcher localement la fonction par une tangente et de considérer que l'intersection de la tangente avec l'axe des abscisses comme une bonne approximation dexs. On peut ensuite réitérer le procédé an d'obtenir une approximation plus ne.
1
rePartie : Mise en oeuvre de la méthode de Newton
1◦) Ecrire l'équation de la tangente au graphe de f en x0 et déterminer son intersection avec l'axe des abscisses, que l'on note x1. Quelle hypothèse faut-il faire pour qu'il y ait une solution au problème ?
2◦) Ecrire une fonction mynewton(f, df, x0, n) qui prend en argument la fonction f, sa dérivée df, le point de départ x0 et le nombre d'itérations et qui renvoie le résultat obtenu après n itérations de la méthode de newton.
3◦) Modier la fonction précédente pour que les calculs s'arrêtent si à un moment f0(xk) est trop proche de 0 (on s'arrêtera par exemple si |f0(xk)|<10−10 et renvoie dans ce cas xk.
4◦) Appliquer la fonction mynewton à la fonction x7→x2 −2pour n ∈J1,5J, ainsi qu'à la fonction x7→ln(x)−1 Que pensez vous de la vitesse de cette méthode ?
5◦) Lorsque l'équation f(x) = 0 admet plusieurs solutions, la solution donnée par la méthode de Newton va dépendre du point de départ.
Eectuer :
mynewton (lambda x : x∗∗2−2, lambda x : 2∗x , 1 ,5) mynewton (lambda x : x∗∗2−2, lambda x : 2∗x , −1 ,5) Remarque:
lambda permet de déclarer une fonction f en donnant son expression f(x), c'est l'équivalent en mathématiques de x7→f(x)
6◦) La méthode aboutit-elle toujours à un résultat ? Eectuer :
mynewton (lambda x : x∗∗2+1 , lambda x : 2∗x , 1 , 5)
2014-2015 page 1 sur 3 TSVP
BCPST 951/952/953 Lycée du Parc TD 2
2
ePartie : La méthode de Newton dans python
La méthode de newton est en faite déjà présente dans le module scipy.
Remarque:
S'il est important de comprendre comment fonctionne l'algorithme, il est éga- lement utile de savoir utiliser les méthodes déjà programmées, testées et opti- misées.
1◦) Rechercher dans la documentation ou sur internet la fonction de scipy qui eectue la méthode de Newton.
2◦) Vous l'avez trouvée ? Vous pouvez faire la suite...
Pour importer la fonction, plusieurs méthodes :
import scipy . optimize # e f f e c t u e l e l i e n avec s c i p y . optimize
#pour l ' u t i l i s e r e n s u i t e : scipy . optimize . newton ( . . . . ) ou bien
from scipy . optimize import newton # importe l a f o n c t i o n
#pour l ' u t i l i s e r e n s u i t e : newton ( . . . . )
Dans la suite, on choisit cette dernière méthode.
3◦) Eectuer maintenant : help ( newton )
Lire rapidement cette aide et répondre aux questions suivantes :
3.a Quels sont les arguments obligatoires de cette fonction ? La donnée de la dérivée est-elle obligatoire ?
3.b Que se passe-t-il quand la dérivée n'est pas donnée ? Remarque:
La méthode des sécantes consiste à remplacer f0(xn) par f(xxnn)−f(x−xn−1n−1) dans la formule.
La convergence est un peu moins rapide
3.c Que se passe-t-il lorsque la méthode ne converge pas ? Eectuer :
newton (lambda x : x∗∗2+1 , 2 , lambda x : 2∗x )
2014-2015 page 2 sur 3 TSVP
BCPST 951/952/953 Lycée du Parc TD 2
3
ePartie : Une jolie application
On utilisera dans la suite la fonction newton de scipy.optimize.
La méthode peut également s'appliquer à des fonctions d'une variable complexe et à valeurs complexes dérivables au sens complexe. C'est le cas des fonctions polynômes.
On considère pour la suitef(z) =z3−1.
1◦) Quelles sont les solutions de f(z) = 0? Pour les obtenir dans python, on pourra faire : import numpy
L = numpy . roots ( [ 1 , 0 , 0 , 1 ] ) #On é c r i t l e s c o e f f i c i e n t s du polyn ôme
#en commenç ant par l e plus grand .
2◦) Ecrire une fonction racine(z) qui eectue la méthode de newton sur la fonction f à partir de z et qui renvoie :
â i si on est proche de la racine L[i] pour i∈J0,2K.
On travaillera avec une précision 10−10. â 3 sinon
Faire quelques tests.
Pour écrire un complexe
#Pour é c r i r e l e complxe 2+ i : 2+1j
#oucomplex ( 2 , 1 )
3◦) On va travailler sur la fenêtre [−a, a]2 que l'on va discrétiser :
On prend N points sur l'intervalle [−a, a]. On pose ainsi h= 2aN et on considère les points : zk,l = (−a+kh) + (−a+lh) pourk, l ∈J0, NK
Ecrire une fonction ClassPoints(a, N) qui renvoie une liste ListPoints constituée de4listes : la liste ListPoints[i] contient les points z dont le résultat par racine(z) est i.
4◦) Acher les points en prenant une couleur diérente pour chacune des listes précédentes.
Opérations sur les complexes z . real # pour l a p a r t i e r é e l l e
z . imag # pour l a p a r t i e i m ag i na i r e abs ( z ) # pour l e module
2014-2015 page 3 sur 3 FIN