IPT-15 : méthode de Newton

Transcription

IPT-15 : méthode de Newton
Tracé des 4 premiers termes de la détermination approximative du zéro.
IPT-15 : méthode de Newton
f(x)
u1
u0
u2
f (u3)
f (u2)
u3
x
u4
I. Principe.
La méthode de Newton est une méthode efficace pour déterminer une valeur approchée d'un zéro (racine) d'une fonction réelle.
Ceci est intéressant tant beaucoup d'équations ne sont pas solubles analytiquement. Il est donc nécessaire de chercher des
solutions numériques approchées.
f (u1)
C'est une méthode itérative.
Etape 1 : l'intersection entre la tangente en u0 et de l'axe des abscisses donne la valeur de u1.
f(x)
u0
u1
f (u0)
x
II. Programme de la méthode de Newton.
Cette méthode itérative nécessite une approximation de la solution u0.
Reprise de l'expression (1) :
u1 = u0 +
f ( u0 )
f ' ( u0 )
A chaque itération, il faut donc les expressions de
f (u0)
f ( ui ) et f ' ( ui ) . Python ne calcule pas la dérivée, il est donc nécessaire
de l'indiquer en argument.
Il faut en plus définir combien d'itérations est souhaité, ce nombre est noté n.
( u1 − u0 ) . f ' ( u0 ) = − f ( u0 )
f ( u0 )
Et donc : u1 = u0 −
f ' ( u0 )
La fonction Newton a donc besoin de 4 arguments :
f , f ' , u0 et n .
On peut écrire :
def newton(f, fprime, u, n):
# renvoie le nieme terme de la methode de
for i in range(n):
u = u - f(u)/float(fprime(u))
return u
(1)
Newton.
Etape 2 : l'intersection entre la tangente en u1 et de l'axe des abscisses donne la valeur de u2.
Exemple sur la fonction
f ( x ) = x 3 + 2 x 2 + x − 2 , dont la dérivée vaut : f ( x ) = 3 x 2 + 4 x + 1
f(x)
u0
u1
u2
def newton (f,fprime,u,n):
# renvoie le niemme terme de la methode
# de Newton.
for i in range(n):
u = u - f(u)/float(fprime(u))
# u correspond a u_(i+1)
return u
x
f (u1)
def f(u):
f = u**3 + 2*u**2 + u - 2
return f
def fprime(u):
fprime= 3*u**2 + 4*u + 1
return fprime
Etude des résultats :
Rang
1
2
3
4
IPT 15 : méthode de Newton
Page 1
IPT 15 : méthode de Newton
Valeur de la racine approchée
2.0
1.2380952380952381
0.8398677760379889
0.7096795196984377
Vérification
16.0
4.2017060792571
0.8430476908644908
0.07439611743151797
Page 2
5
6
7
0.6957728017350469
0.6956207876043369
0.6956207695598621
0.0007958533482259611
9.444745030506851e-08
0.0
III. Choix de l'arrêt et du nombre d'itération de calcul.
On ne connait pas au préalable le nombre d'itération nécessaire pour obtenir la précision souhaitée. On a vu sur l'exemple
précédent qu'une itération de plus peut avoir des conséquences importantes sur la précéision de la solution. une solution
consiste à utiliser une boucle while avec une condition sur la précision à obtenir. Mais cette précision porte sur f(un) et non sur
un. De plus, la méthode de Newton ne converge pas obligatoirement. Il y a donc un risque de boucle infini. Une solution
améliorée pour éviter une boucle infinie, consiste à ajouter une limite au nombre de boucle.
Solution 1 :
Pour cette solution, on retrouve la fonction f, sa dérivée fprime, la valeur initiale u et à la place du nombre d'itérations non
définie une valeur de précision à obtenir eps. Cette fonction renvoie deux valerurs : le nombre d'itérations et la valeur
approchée de la solution.
def newton2 (f,fprime,u,eps):
i = 0
while abs(f(u)) > eps:
u = newton(f,fprime,u,i)
i = i+1
return i, u
Cette fonction utilise la fonction newton défini précédemment. Comme on l'a déjà vu, cette méthode n'est pas la plus
performante en termes de complexité. En effet, à chaque itération de la boucle while, on recalcule les i termes de la suite. On
aurait pu inclure le corps de la fonction newton dans la fonction newton2.
Solution 2 :
Avec cette nouvelle solution, on a ajouté une condition sur la limite du nombre d'itérations (choisi arbitrairement à 100). De
plus, pour améliorer les perormances de la fonction, on a réintroduit le corps de la fonction newton dans cette nouvelle
fonction.
def newton3 (f,fprime,u,eps):
i = 0
while abs(f(u)) > eps and i < 100 :
u = u - f(u)/float(fprime(u))
i = i+1
return i, u
Autre critère d'arrêt consiste à détecter un écart faible entre 2 valeurs successives de un. le critère s'exprime alors sous la forme :
un+1 - un < eps
IPT 15 : méthode de Newton
Page 3