%
%  Reseni soustavy rovnic metodou nejvetsiho spadu
%
%  10.4.97
%
%  Jan Nejedly FAV2
%
%  Vstup:   A matice soustavy
%           b prava strana
%
%

function x = mns(A,b,x0);

clear x;
clear x_k;
clear x_k1;
clear d_k;
clear t_k;
clear cas;

presnost = 1*10^(-6);
tic;
iterace = 0;
norma = 1;
dim = size(A);

x_k = x0;		% pocatecni aproximace je prava strana

while (norma >= presnost) & (iterace<5000)
  iterace = iterace + 1;
  d_k = A * x_k - b;                            %gradient F(x)
  t_k = (d_k' * d_k) / (d_k' * A * d_k);        %vypocet kroku
  x_k1 = x_k - t_k * (A * x_k - b);             %vlastni iteracni formule
  norma = 0;
  for i = 1 : dim
    norma = norma + (x_k1(i) - x_k(i))^2;
  end;
  norma = sqrt(norma);
  x_k = x_k1
end;
x = x_k1;

cas = toc;

disp('Reseni vypoctene programem MNS: ');
disp(x);
disp('Doba vypoctu:                   ');
disp(cas);
disp('Pocet iteraci:                  ');
disp(iterace);

%KONEC
