Optimisation, algorithmique (MML1E31) (M1 Maths, 2016-2017) Feuille de TD/TP n◦ 2 : Méthode de Newton Exercice 1. Le but de cet exercice est d’implémenter la méthode de Newton en dimension 1. 1. Quelles sont les hypothèses du théorème de convergence de la méthode de Newton pour une fonction f : R → R ? 2. Ecrire le pseudo-code de la méthode de Newton pour une fonction f : R → R. 3. On considère la fonction f (x) = log ex + e−x . (a) Justifier que la méthode de Newton converge pour cette fonction. (b) En quel point x? f atteint-elle son minimum ? 4. Implémenter une fonction function [Xk, FXk] = newton_dim1(x0,eps,alph, bet) qui applique la méthode de Newton en appelant les trois fonctions suivantes (supposées bien définies et à adapter pour chaque cas particulier) — f(x) qui calcule f (x) pour un réel x donné. — der_(x) qui calcule f 0 (x) pour un réel x donné. — dersec_f(x) qui calcule f 00 (x) pour un réel x donné. Afficher à chaque itération les valeurs de l’itération k et du pas t retenu avec la commande disp([k, t]). 5. Tester cette fonction avec la fonction f (x) = log (ex + e−x ) pour les points initiaux x0 valant 1, 1.1 et 10. 6. Implémenter une nouvelle fonction function [Xk, FXk] = newton_dim1_pure(x0,eps,alph, bet) qui prend toujours t = 1 pour le pas de descente (suppression de la méthode de rebroussement) et qui s’arrête au bout de 10 itérations. Tester cette fonction avec la fonction f (x) = log (ex + e−x ) pour les points initiaux x0 1, 1.1 et 10. Exercice 2. Le but de cet exercice est de comparer les performances de l’algorithme de descente de gradient et de l’algorithme de Newton pour une fonctionnelle f définie sur Rn avec n > 2. Etant donnée une matrice A ∈ Mp,n (R), dont on note a1 , . . . , ap ∈ Rn les p vecteurs lignes, et b ∈ Rp , on considère la fonction f : Rn → R définie pour tout x ∈ Rn par f (x) = p X j=1 1 j ,xi+b j eha . 1. En Scilab, écrire les fonctions — fx = objectif(x,A,b) qui calcule f (x), — gfx = gradient_obj(x,A,b) qui calcule ∇f (x), — hfx = hess_obj(x,A,b) qui calcule la matrice hessienne ∇2 f (x). Afin de ne pas avoir à recopier les paramètres A,b dans les algorithmes de descente, on définira ensuite les trois fonctions f, gradf, hessf par // Attention : Besoin de definir les variables A et b avant d’appeler deff(’fx=f(x)’,’fx = objectif(x,A,b)’); deff(’gfx=gradf(x)’,’gfx = grad_obj(x,A,b)’); deff(’hfx=hessf(x)’,’hfx = hess_obj(x,A,b)’); 2. Implémenter une fonction function [Xk, FXk] = desc_newton(x0,eps,alph, bet) qui applique la méthode de Newton en appelant les trois fonctions f(x), gradf(x), hessf(x). 3. Tester la fonction pour n = 2, p = 3 et f (x) = ex1 +3x2 −0.1 + ex1 −3x2 −0.1 + e−x1 −0.1 , et la valeur initiale x0=[-2 ; 3]. On prendra eps = 10^(-8); alph = 0.4; bet = 0.8; Afficher les contours de la fonction et la séquence de points calculés par l’algorithme de Newton. 4. Implémenter également une fonction function [Xk, FXk] = desc_gradient_r(x0,eps,alph, bet) qui applique la méthode de descente de gradient avec le méthode de rebroussement pour le calcul du pas de descente. 5. On reprend l’exemple en dimension 2. (a) Lancer l’algorithme de descente de gradient et afficher les points calculés sur la graphique précédent. (b) Afin de comparer la vitesse de convergence, on va déterminer la solution du problème avec une fonction de scilab à l’aide des lignes suivantes : // determination de la solution [xstar, vg_min] = fsolve(x0, gradf) pstar = f(xstar) (c) Afficher sur un même un graphique en échelle logarithmique les erreurs f (x(k) )−p? pour la méthode de Newton et pour la descente de gradient. 2