function [x,fx]=zlaty_rez(f,a,b,maxit)
% Funkce implementujici metodu zlateho rezu pro hledani minima
% Na vstupu funkce f jejiz minimum hledame, interval [a,b] v nemz hledame minimum.
% Na vstupu maximalni pocet iteraci maxit.
% Na vystupu funkce vrati bod x z intervalu [a,b] a funkcni hodnotu fx=f(x) obdrzene po maxit poctu iteraci metody.
% Bod x na vystupu je aproximaci bodu, kde funkce f nabyva minimum (globalni nebo lokalni).

rho=(3-sqrt(5))/2;
u=a+rho*(b-a);
v=b-rho*(b-a);

fa=f(a);
fb=f(b);
fu=f(u);
fv=f(v);

for k=1:maxit
    if (fu<fv)
        b=v;
        fb=fv;
        v=u;fv=fu;
        u=a+rho*(b-a);fu=f(u);
    else
        a=u;fa=fu;
        u=v;fu=fv;
        v=b-rho*(b-a);fv=f(v);
    end
end
points=[a,b,u,v];
[fx,i]=min([fa,fb,fu,fv]);
x=points(i);
end
