function [L,U,p,jb] = LUdemo(A)
% [L,U,p,jb] = LUdemo(A)
% ----------------------------------------------------------
% konstrukce LU-rozkladu matice A krok po kroku
% L  ... dolni trojuhelnikova matice
% U  ... horni trojuhelnikova (obecne schodovita) matice
% p  ... sloupcovy permutacni vektor takovy, ze A(p,:)= L*U
% jb ... radkovy vektor sloupcovych indexu baze v A
% POZNAMKA: Pri poslednim schodu staci zadat jen s misto [r,s]
%           pri vstupu z klavesnice nebo nic.

[m,n] = size(A)
A = [A,(1:m).']     % Vychozi rozsirena matice
jb=[];
rs = input('Vlozte polohu dalsiho schodu ve tvaru [r,s]: ');
while length(rs)>=2
  r = rs(1), s = rs(2);
  jb=[jb,s]       %  Dosud nalezene sloupcove pozice schodu
  k = length(jb)  %  Radkova pozice aktualniho schodu
  if r>k
     disp('PREHOZENI k-ho a r-teho RADKU:');
     A([k,r],:) = A([r,k],:)
pause;
  else
  disp('Zamena radku se neprovadi')
  end
%-------------------------------------------------------------
  disp('ULOZENI TRANSFORMACNICH SKALARU MISTO NUL DO s-teho SLOUPCE:')
  A(k+1:end,s) = A(k+1:end,s)/A(k,s)
pause;
%-------------------------------------------------------------
  disp('ELIMINACE ZBYVAJICICH SLOUPCU s+1,...,n:')
  A(k+1:end,s+1:n) = A(k+1:end,s+1:n) - A(k+1:end,s)*A(k,s+1:n)
pause;
%-------------------------------------------------------------
%-------------------------------------------------------------
  disp('Posledni eliminovany sloupec:');
  s
  rs = input('Vlozte polohu dalsiho schodu ve tvaru [r,s]: ')
end
jb = [jb,rs]
k  = length(jb);
p = A(:,n+1);
U = A(:,1:n);
U(:,jb) = triu(A(:,jb));
L = zeros(m);
L(:,1:k) = tril(A(:,jb),-1);
L = L+eye(m);
