%priklad minimalizace funkce jedne promenne metodou zlateho rezu

%zadejme si funkci -sin(x)
f=inline('-sin(x)','x');

%na zacatku nastavme uvodni body metody a < c , minimum by melo byt nekde
%kolem pi/2=1.5708, a bude mezi temito dvema body, bod b budeme dopocitavat
a=0;
b=pi;

%nastavme presnost, se kterou chceme nalezt minimum
presnost=1e-5;

%ulozime si parametr rho tak, ze phi = rho/(1-2*rho), kde phi je zlaty rez
% phi = 0.5/(1+sqrt(5))
rho=(3-sqrt(5))/2;

%napocteme prvni nastrel bodu b
u=a+rho*(b-a);
v=b-rho*(b-a);
fa = f(a);
fb = f(b);
fu = f(u);
fv = f(v);

%hledani probiha v cyklu
while 1,
    if (b-a) < presnost,
        break
    end
    
    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
    [a,b]
end

sprintf('Minimum je na intervalu  < %g,%g > ',a,b)