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