%Skripta za resavanje zadatka 7.43 iz zbirke %Metodom najstrmijeg spusta nalazimo minimum funkcionala f=x^2+y^2+xy polazeci od %tacke (1,2) sa tacnoscu 10^(-4) % Funkcional f = @(x,y) x.^2 + y.^2 + x.*y; % Prvi izvodi - potrebni za gradijent fx = @(x,y) 2*x+y; fy = @(x,y) 2*y+x; % Drugi izvodi - potrebni sa Hessian fxx = @(x,y) 2; fxy = @(x,y) 1; fyx = @(x,y) 1; fyy = @(x,y) 2; % Pocetna iteracija i tacnost x0 = 1; y0 = 2; tol= 1e-4; % Postavljamo vrednost tekuce iteracije na pocetnu x = x0; y = y0; iter=0; hold on while(1) % Pamtimo vrednosti prethodne iteracije xp = x; yp = y; iter=iter+1; % Izracunavamo vektor gradijenta u tekucoj tacki d = -[fx(x, y) fy(x, y)]; % Izracunavamo vrednost Hessiana u tekucoj tacki H = [fxx(x, y) fxy(x, y);... fyx(x, y) fyy(x, y)]; % Ukoliko tekuca tacka nije stacionarna izracunavamo koeficijenat lambda % koji odredjuje "koliko dugo" je potrebno spustati se u pravcu d if (~isequal(d,[0 0])) lambda = d*d'/(d*H*d'); else % Ukoliko je tacka stacionarna, nasli smo lokalni minimum break; end % Izracunavamo vrednost nove tacke x = x + lambda*d(1); y = y + lambda*d(2); plot([x,xp],[y,yp]); %crtamo pomeraj, dovoljno je zadati krajnje tacke % Ukoliko je postignuta zeljena tacnost prekidamo iterativni postupak if (abs(x-xp)