méthode de newton - freebcpst.parc.free.fr/joomla/documents/maths952/info/td2_c.pdf · 2014. 9....

4
f (x)=0 I R xs xs f x0 x1 y = f 0 (x 0 )(x - x 0 )+ f (x 0 ) x 1 = x 0 - f (x 0 ) f 0 (x 0 ) f 0 (x 0 ) 6=0 f df x0 n - f 0 (x k ) 0 |f 0 (x k )| < 10 -10 x k ** - -

Upload: others

Post on 30-Mar-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Méthode de Newton - Freebcpst.parc.free.fr/joomla/DOCUMENTS/Maths952/Info/TD2_c.pdf · 2014. 9. 11. · Méthode de Newton Le but de la méthode de newton est de déterminer de manière

BCPST29

50 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 x1x2x3

On part d'un point de l'intervalle, si possible pas trop éloigné de la position de la solution re-cherchée, que l'on notera dans la suite xs. L'idée est d'approcher localement la fonction par unetangente et de considérer que l'intersection de la tangente avec l'axe des abscisses comme unebonne approximation de xs. On peut ensuite réitérer le procédé a�n d'obtenir une approximationplus �ne.

1 re Partie : 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 ?

Solution: L'équation de la tangente est : y = f ′(x0)(x− x0) + f(x0) ainsi x1 = x0 −f(x0)

f ′(x0)

On suppose donc f ′(x0) 6= 0.

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érationset qui renvoie le résultat obtenu après n itérations de la méthode de newton.

Solution:

de f mynewton (f , df , x0 , n ) :""" E f f e c tue l a mé thode de Newton à p a r t i r de x_0 avec n i t é r a t i o n s """x = float ( x0 ) #Ceci pour f o r c e r l e passage en f l o a t , i n u t i l e avec

python3f o r i in range (N ) :

x = x − f (x ) /df (x )re turn x

3◦) Modi�er la fonction précédente pour que les calculs s'arrêtent si à un moment f ′(xk) est trop proche de 0 (on s'arrêtera par exemple si

|f ′(xk)| < 10−10 et renvoie dans ce cas xk.

Solution:

de f mynewton (f , df , x0 , n ) :""" E f f e c tue l a mé thode de Newton à p a r t i r de x_0 avec n i t é r a t i o n s """x = float ( x0 ) #Ceci pour f o r c e r l e passage en f l o a t , i n u t i l e avec

python3f o r i in range (N ) :

i f abs ( df (x ) ) < 10∗∗(−10) :r e turn x

x = x − f (x ) /df (x )re turn x

2014-2015 page 1 sur 4 TSVP

Page 2: Méthode de Newton - Freebcpst.parc.free.fr/joomla/DOCUMENTS/Maths952/Info/TD2_c.pdf · 2014. 9. 11. · Méthode de Newton Le but de la méthode de newton est de déterminer de manière

BCPST 951/952/953 Lycée du Parc TD 2

4◦) Appliquer la fonction mynewton à la fonction x 7→ x2 − 2 pour n ∈ J1, 5J, ainsi qu'à la fonction x 7→ ln(x)− 1 Que pensez vous de la vitesse de

cette méthode ?

Solution:

Pour la fonction x 7→ x2 − 2 Pour la fonction x 7→ ln(x)− 1n=0 1.0 3.0n=1 1.5 2.704163134n=2 1.41666666667 2.71824509872n=3 141421568627 2.71828182821n=4 1.41421356237 2.71828182846

C'est très rapide !

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.

E�ectuer :

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 dex 7→ f(x)

6◦) La méthode aboutit-elle toujours à un résultat ?

E�ectuer :

mynewton ( lambda x : x∗∗2+1 , lambda x : 2∗x , 1 , 5)

2 e Partie : 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 également utile de savoir utiliser lesméthodes déjà programmées, testées et optimisées.

1◦) Rechercher dans la documentation ou sur internet la fonction de scipy qui e�ectue 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 ipy . opt imize#pour l ' u t i l i s e r en su i t e :scipy . optimize . newton ( . . . . )

ou bien

from scipy . optimize import newton # importe l a f on c t i on#pour l ' u t i l i s e r en su i t e :newton ( . . . . )

Dans la suite, on choisit cette dernière méthode.

3◦) E�ectuer 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 ?

Solution: Les arguments obligatoires : la fonction et le point de départ.La donnée de la dérivée n'est pas obligatoire, dans ce cas, la méthode est remplacée par la méthode dessécantes.

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 f ′(xn) parf(xn)−f(xn−1)

xn−xn−1dans la formule.

La convergence est un peu moins rapide

3.c Que se passe-t-il lorsque la méthode ne converge pas ?

E�ectuer :

newton ( lambda x : x∗∗2+1 , 2 , lambda x : 2∗x )

2014-2015 page 2 sur 4 TSVP

Page 3: Méthode de Newton - Freebcpst.parc.free.fr/joomla/DOCUMENTS/Maths952/Info/TD2_c.pdf · 2014. 9. 11. · Méthode de Newton Le but de la méthode de newton est de déterminer de manière

BCPST 951/952/953 Lycée du Parc TD 2

Solution:

Traceback ( most recent call last ) :File "<py sh e l l#13>" , line 1 , in <module>

scipy . optimize . newton ( lambda x : x∗∗2+1 , 2 , lambda x : 2∗x )File "/ usr / l i b /python2 .7/ d i s t−packages / s c ipy / opt imize / z e ro s . py" , line 137 ,in newton

r a i s e RuntimeError ( msg )RuntimeError : Failed to converge after 50 iterations , value i s

0 .870752774435

Python prévient qu'il y a un problème !

3 e Partie : 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 casdes fonctions polynômes.

On considère pour la suite f(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 p lus grand .

2◦) Ecrire une fonction racine(z) qui e�ectue 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.

Solution:

eps = 10∗∗(−10)L = numpy . roots ( [ 1 , 0 , 0 , 1 ] )de f g (z ) :

r e turn (z∗∗3+1)de f dg (z ) :

r e turn (3∗z∗∗2)de f racine (z , L , g , dg ) :

""" renvo i e l e numé ro de l a r a c i n e dont se rapproche l a mé thode denewton et 3 en cas de non−convergence """lz = newton (g , z , dg )code = len (L )f o r i in range ( len (L ) ) :

i f abs (lz−L [ i ] ) < eps :code = i

re turn ( code )

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 = 2a

N et on considère les points :

zk,l = (−a + kh) + (−a + lh) pour k, l ∈ J0, NK

Ecrire une fonction ClassPoints(a, N) qui renvoie une liste ListPoints constituée de 4 listes :

la liste ListPoints[i] contient les points z dont le résultat par racine(z) est i.

Solution:

2014-2015 page 3 sur 4 TSVP

Page 4: Méthode de Newton - Freebcpst.parc.free.fr/joomla/DOCUMENTS/Maths952/Info/TD2_c.pdf · 2014. 9. 11. · Méthode de Newton Le but de la méthode de newton est de déterminer de manière

BCPST 951/952/953 Lycée du Parc TD 2

de f ClassPoint (a , N , L , g , dg ) :""" Clas se l e s d i f f e r e n t s po in t s en 4 l i s t e s su ivant l a r a c i n e dont se

rapproche l a mé thode de Newton"""h = float ( 2 .∗ a/N )ListPoints = [ [ ] f o r i in range ( len (L )+1) ]f o r p in range (N+1) :

f o r k in range (N+1) :z = complex(−a+p∗h ,(−a+k∗h ) )code = racine (z , L , g , dg )ListPoints [ code ] . append (z )

re turn ( ListPoints )

4◦) A�cher 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 pa r t i e r é e l l ez . imag # pour l a pa r t i e imag ina i r eabs (z ) # pour l e module

Solution:

coul =[ ' red ' , ' b lue ' , ' green ' , ' white ' ]

de f Jolidessin ( ListPoints ) :""" Dess ine chaque po int avec une cou l eur d i f f é r en t e s par sous− l i s t e . """f o r i in range ( len ( ListPoints ) ) :

plt . scatter ( [ z . real f o r z in ListPoints [ i ] ] , [ z . imag f o r z inListPoints [ i ] ] , c=coul [ i ] , edgecolors=' none ' )

plt . show ( )plt . axhline (y=0,xmin=−1,xmax=1)plt . axvline (x=0, ymin=−1,ymax=1)

L = ClassPoint (1 ,100 , L , g , dg )Jolidessin (L )

1.5 1.0 0.5 0.0 0.5 1.0 1.51.5

1.0

0.5

0.0

0.5

1.0

1.5

2014-2015 page 4 sur 4 FIN