• Aucun résultat trouvé

0 2 Méthode de Newton

N/A
N/A
Protected

Academic year: 2022

Partager "0 2 Méthode de Newton"

Copied!
4
0
0

Texte intégral

(1)

BCPST2

9 5

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 intervalleIdansR.

x0 x3 x2 x1

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 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 re Partie : Mise en oeuvre de la méthode de Newton

1) Ecrire l'équation de la tangente au graphe defenx0et déterminer son intersection avec l'axe des abscisses, que l'on notex1. 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

0

(x

0

)(x − x

0

) + f (x

0

) ainsi x

1

= x

0

− f (x

0

) f

0

(x

0

) On suppose donc f

0

(x

0

) 6= 0 .

2) Ecrire une fonction mynewton(f, df, x0, n) qui prend en argument la fonctionf, sa dérivéedf, le point de départx0et le nombre d'itérations et qui renvoie le résultat obtenu aprèsnitérations de la méthode de newton.

Solution:

def mynewton ( f , df , x0 , n ) :

""" E f f e c t u e 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 python3

f o r i in range ( N ) : x = x − f ( x ) /df ( x ) return x

3) Modier la fonction précédente pour que les calculs s'arrêtent si à un momentf0(xk)est trop proche de 0(on s'arrêtera par exemple si

|f0(xk)|<10−10et renvoie dans ce casxk.

Solution:

def mynewton ( f , df , x0 , n ) :

""" E f f e c t u e 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 python3

f o r i in range ( N ) :

i f abs ( df ( x ) ) < 10∗∗( −10) : return x

x = x − f ( x ) /df ( x ) return x

2014-2015 page 1 sur 4 TSVP

(2)

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

4) Appliquer la fonction mynewton à la fonctionx7→x2−2pourn∈J1,5J, ainsi qu'à la fonctionx7→ln(x)−1Que pensez vous de la vitesse de cette méthode ?

Solution:

Pour la fonction x 7→ x

2

− 2 Pour la fonction x 7→ ln(x) − 1

n=0 1.0 3.0

n=1 1.5 2.704163134

n=2 1.41666666667 2.71824509872

n=3 141421568627 2.71828182821

n=4 1.41421356237 2.71828182846 C'est très rapide !

5) Lorsque l'équationf(x) = 0admet 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 fonctionfen donnant son expressionf(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)

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 les méthodes déjà programmées, testées et optimisé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 ?

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 des sé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 à remplacerf0(xn)par f(xn)−f(xn−xn−1xn−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 4 TSVP

(3)

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

Solution:

Traceback ( most recent call last ) :

File "<p y s h 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 i p y / optimize / z e r o 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 cas des fonctions polynômes.

On considère pour la suitef(z) =z3−1.

1) Quelles sont les solutions def(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 fonctionfà partir dezet qui renvoie : â i si on est proche de la racine L[i] pouri∈J0,2K.

On travaillera avec une précision10−10. â 3 sinon

Faire quelques tests.

Solution:

eps = 10∗∗( −10)

L = numpy . roots ( [ 1 , 0 , 0 , 1 ] ) def g ( z ) :

return ( z∗∗3+1) def dg ( z ) :

return (3∗ z ∗ ∗ 2) def racine ( z , L , g , dg ) :

""" r e n v o i e l e numé ro de l a r a c i n e dont se rapproche l a mé thode de newton 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 return ( code )

Pour écrire un complexe

#Pour é c r i r e l e complxe 2+ i : 2+1j

#ou complex ( 2 , 1 )

3) On va travailler sur la fenêtre[−a, a]2que l'on va discrétiser :

On prendN points sur l'intervalle[−a, a]. On pose ainsih=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.

Solution:

2014-2015 page 3 sur 4 TSVP

(4)

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

def ClassPoint ( a , N , L , g , dg ) :

""" Classe l e s d i f f e r e n t s p o i n t s en 4 l i s t e s suivant 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 ) return ( ListPoints )

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 a g i n a i r e abs ( z ) # pour l e module

Solution:

coul =[ ' red ' , ' blue ' , ' green ' , ' white ' ] def Jolidessin ( ListPoints ) :

""" Dessine chaque point avec une c o u l e u r d i f f é r e n 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 in ListPoints [ 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.5

1.5 1.0 0.5 0.0 0.5 1.0 1.5

2014-2015 page 4 sur 4 FIN

Références

Documents relatifs

Nous les y lais- serons prendre leurs ébats et leur pâture, et quand ils reviendront vers nous nous prendrons leur menotte pour faire ensemble encore un

Les nombres x et y sont de parités distinctes sinon z serait un nombre pair strictement supérieur à 2 et ne serait pas premier. On va montrer que ce sont les

[r]

Il en résulte que leurs antécédents y 1 et y 2 par l’isomorphisme φ le sont également (l’image d’une famille libre par une application linéaire injective est libre).. En

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 suite x s. L'idée est d'approcher localement

X en seondes que haun a réalisé suit une distribution normale N (140; 100). Déterminer le nombre de skieurs ayant réalisé un temps supérieur à 150 seondes... 2.. 2) Parmi 900

En plus de toutes ces raisons ponctuelles, il existe deux importantes exceptions à l’octroi de l’exécution forcée de l’obligation : la présence d’un droit de révocation

On sait qu’une suite croissante de nombres r´eels converge (vers une limite finie) si et seulement si elle est born´ee; on peut dire par cons´equent :.. Th´ eor`