function X = pokoorspust_crtanje2D(f,P,max1,tol)
% Funkcija graficki prikazuje nalazenje resenja sistema linearnih jednacina
% dimenzije 2 metodom pokoordinatnog spusta trazenjem minimuma funkcionala
%
% Argumenti funkcije su :
%   f - string koji sadrzi opis funkcionala ciji minimum trazimo 
%   P - pocetna iteracija, X0
%   max1 - maksimalni broj iteracija
%   tol - zeljena tacnost.  Ukoliko se ne navede, podrazumeva se eps
%
% Funkcija vraca:
%   X - Vektor resenja
%
% Autor : Zorica Drazic
% Verzija : 1.0
% Datum : 10.11.2011.

% Ukoliko nije prosledjen poslednji argument, tol=eps
if (nargin<4)
    tol=eps;
end

% Ukoliko je prosledjeno manje od 3 elemenata, prekinuti program i
% prijaviti gresku
if nargin<3
    error(['Upotreba : ' mfilename '(f,P,max1,tol)']);
end

% Provera da li je f string
if ~isstr(f)
    error('Prvi argument mora da bude string');
end

f=sym(f);

x=P(1);
y=P(2);

hold on
    ind=1; %ind=1 krecemo se po x osi, ind=0 krecemo se po y osi
    for k=1:max1       
        if ind==1   %x osa
            % fx je funkcija jedne promenljive (po x)
            fx=subs(f,'y',P(2)); 
            % trazimo izvod
            fxx=diff(fx,'x');
            % resavamo jednacinu funkcional(x)=0
            x=solve(fxx);                  
            ind=0;
        else        %y osa
            % fy je funkcija jedne promenljive (po y)
            fy=subs(f,'x',P(1));
            % trazimo izvod
            fyy=diff(fy,'y');
            % resavamo jednacinu funkcional(y)=0
            y=solve(fyy);            
            ind=1;
        end
        
        % vrednosti x i y pretvaramo u tip double
        x=double(x);
        y=double(y);
        X=[x y]';
        
        % crtamo pomeranje po odgovarajucoj osi
        plot([P(1),X(1)],[P(2),X(2)]);
        
        if(norm(X-P)<tol)
            disp('Broj potrebnih iteracija: ');
            disp(k);
            return
        end
        P=X;           
    end
    
hold off
   
% ukoliko za max1 iteracija nije postignuta odgovarajuca tacnost:
error('Za zadati broj iteracija nije postignuta odgovarajuca tacnost.');