Sujet ()

publicité
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
Téléchargement