// // il faut charger les fonctions dans scilab avant // d'exécuter ce script // // 1/ representation de la fonction à minimiser // par ses lignes de niveaux xmin = -4; xmax = 6; ymin = -2; ymax = 4; nx = 60; ny = 60; xx = linspace(xmin,xmax,nx); yy = linspace(ymin,ymax,ny); Z = mat_grille(f1,xx,yy); nv = 24; // nb de niveaux usecanvas(%t); clf() // efface la fenêtre graphique courante drawlater() // avec cette instruction les dessins seront // "envoyés" ultérieurement à l'écran avc drawnow() // installation d'une autre colormap pour la fenêtre f = gcf(); f.color_map = jetcolormap(nv); // choix échelle isométrique a = gca(); // a correspond au système d'axes (et permet de modifier ses propriétés) a.isoview = "on"; // echelle isometrique // pour enlever l'affichage des valeurs des niveaux xset("fpf"," ") // calcul des lignes isovaleurs contour2d(xx,yy,Z,nv); // affichage du minimum plot(1,1,"xk"); xstring(1,1.1,"x*"); // 2/ trajectoires du gradient à pas fixe en partant // de différents points de départ et avec différents pas itermax = 25; tol = 1e-2; // essai 1 x0 = [2.5;-2]; tau = 0.5; [X, iter, cvg_flag] = gradient_pas_fixe(x0, f1, grdf1, tau,tol, itermax,%f); plot(X(1,:),X(2,:),'^-k'); e1 = gce(); // utilisé pour legend // essai 2 (avec pas fixe optimal) lambda = spec([ 0.06 , 0.12 ; 0.12 , 0.98 ]); tau_opt = 2/(lambda(1)+lambda(2)); x0 = [5;-1]; [X, iter, cvg_flag] = gradient_pas_fixe(x0, f1, grdf1, tau_opt,tol, itermax,%f); plot(X(1,:),X(2,:),'*-k'); e2 = gce(); // utilisé pour legend // essai 3 x0 = [-3;3]; tau = 1.5; [X, iter, cvg_flag] = gradient_pas_fixe(x0, f1, grdf1, tau,tol, itermax,%f); plot(X(1,:),X(2,:),'d-k'); e3 = gce(); // utilisé pour legend // affichage de la légende legend([e1,e2,e3],"x0=[2.5;-2], pas=0.5","x0=[2.5;-2], pas opt="+string(tau_opt),... "x0=[5,-1], pas=1.5"); // le dessin complet est basculé à l'écran drawnow()