Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %HookJeves
- function [x,f]=HookJeevja(fun,x0,d,dmin)
- %
- % Metoda HOOK-JEEVES za minimizaciju f-je vise promenljivih bez ogranicenja
- % fun - funkcija cilja
- % x0 - pocetno pogadjanje
- % d - pocetni korak
- % dmin - krajnja duzina koraka (uslov zaustavljanja)
- n = length(x0); % duzinu vektora x0 - dimenzija
- e = eye(n) * d; % e matrica sa vrednostima d na glavnoj dijag.
- x = x0;
- f = feval(fun,x); %f resenja funkcije
- it = 0; % it broj iteracije
- while e(1,1) > dmin %dok je korak veci od dmin
- it = it + 1; % povecava se broj iteracija
- t = x;
- for i=1:n %pretrazivanje u svim dimenzijama
- z = t + e(:,i); %z je x pomereno za e(:,i)
- y = feval(fun,z); % vrednost funkcije za pomerenu tacku z
- if y < f %ako vrednost posle skoka manja od vredosti pre
- t = z; % t postaje z jer je bolja od prethodnof t
- f = y; % vrednot funkc je vrednost u tacki y
- else %ako vrednost y !< f
- disp('Odbacuje se') % odbacuje se
- z = t - e(:,i); %pokusava se skok na drugu stranu
- y = feval(fun,z); %
- if y < f %
- t = z; %
- f = y; %Sve isto kao u proslom ifu
- else %
- disp('Odbacuje se') %
- end
- end
- end
- if all(t==x) % ako se nismo nigde pomerili
- e = e * 0.5; % smanjuje se korak
- else % ako smo se pomerili
- x1 = t + (t-x); % provera okoline posle skoka
- y1 = feval(fun,x1); % x1 novo pomeranje od nove tacke
- x = t; % y1 je vrednost u novoj tacki
- if y1 < f % ako je fun u novoj tacki bolja od stare
- for i=1:n %pretrazivanje po svim pravcima
- z = x1 + e(:,i); %pretrazivanje za i-ti pravac
- y = feval(fun,z); % izracunavanje funkc za pomeraj
- if y < y1 % nova vrednost bolja od stare
- x = z; % x se pomera u tu tacku
- f = y; % uzima se vrednost funkc za tu tacku
- break;
- else
- disp('odbacuje se') % ako nije odbacuje se skok
- end
- z = x1 - e(:,i); % sve isto samo za suprotan pravac
- y = feval(fun,z); %
- if y < y1 %
- x = z; %
- f = y; %
- break; %
- else %
- disp('odbacuje se') %
- end
- end
- disp('Los skok - nema tacke u oklini')
- else
- disp('Los skok')
- end
- end
- end
- %f
- function y = f(x)
- y = 2*x(1).^2 + x(2).^2 - 3;
- end
- %Termin4
- x0 = [-2;-2];
- d = 0.5;
- dmin = 10^(-2);
- [x,f] = HookJeevja('f',x0,d,dmin)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement