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 ∇2f(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 ces fonctions
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 pro-
blè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