// fonctions pour tp2 function y = f1(x) // x doit ĂȘtre un vecteur 2x1 A = [ 0.06 , 0.12 ; 0.12 , 0.98 ]; b = [0.18 ; 1.1]; y = 0.5*x'*(A*x) - b'*x; endfunction function df = grdf1(x) // x doit ĂȘtre un vecteur 2x1 A = [ 0.06 , 0.12 ; 0.12 , 0.98 ]; b = [0.18 ; 1.1]; df = A*x-b; endfunction function [X, iter, cvg_flag] = gradient_pas_fixe(x0, f, grdf, tau, ... tol, itermax, verb) iter = 1 X = zeros(size(x0,1),itermax+1); X(:,1) = x0; grad_courant = grdf(x0); while iter <= itermax & norm(grad_courant) > tol X(:,iter+1) = X(:,iter) - tau*grad_courant; iter = iter + 1; grad_courant = grdf(X(:,iter)); if verb then printf("\n iteration = %d", iter) printf("\n f(x) = %g \n", f(X(:,iter))) end end cvg_flag = norm(grad_courant) <= tol; X = X(:,1:iter); iter = iter-1; endfunction function Z = mat_grille(f,x,y) // fabrique la matrice des valeurs de f // sur la grille definie par x et y // (pour contourner le bug de contour2d...) m = length(x); n = length(y); Z = zeros(m,n); for i = 1:m for j = 1:n Z(i,j) = f([x(i);y(j)]); end end endfunction