function X = steepdesc(A,b,P,max1,tol)

% steepdesc  resava sistem linearnih jednacina Ax=b metodom najstrmijeg
% spusta
%
% Poziv funkcije: X = steepdesc(A,b,P,max1,tol)
%
% Argumenti funkcije su :
%   A - simetricna matrica dimenzije NxN
%   B - vektor desne strane dimenzije Nx1
%   P - vektor dimenzije Nx1, pocetna aproksimacija (X0)
%   max1 - maksimalan broj iteracija
%   tol - proizvoljan argument - tolerancija za resenje. Ukoliko se ne
%   navede, podrazumevana vrednost mu je 1e-5
%
% Funkcija vraca:
%   vektor X dimenzije Nx1 - aproksimacija resnja sistema Ax=B 
%
% Autor : Zorica Drazic
% Verzija : 1.0
% Datum : 4.10.2009.
%


% ukoliko nije prosledjena vrednost za toleranciju resenja, postavljamo je
% na podrazumevanu vrednost 1e-5
    if nargin<5
        tol=1e-5;
    end
    
    
    % za svaku narednu iteraciju racunamo r, delta i X
    for k=1:max1
        % d=-r(k), pa ne moramo koristiti dodatnu promenljivu za d
        r=b-A*P;
        
        % ukoliko je postignuta odgovarajuca tacnost, prekidamo iterativni
        % postupak i vracamo rezultat
        if(norm(r)<tol)
            disp('Broj potrebnih iteracija: ');
            disp(k);
            return
        end
        % delta = <r(n),r(n)> / <A*r(n),r(n)>
        delta=r'*r/((A*r)'*r);
        
        X=P+delta*r;
        P=X;
    end

   
% ukoliko za max1 iteracija nije postignuta odgovarajuca tacnost:
error('Za zadati broj iteracija nije postignuta odgovarajuca tacnost.');

