function [L,R,P] = showlr(A)
%SHOWLR Schrittweise Anzeige der Aktionen in der LR-Faktorisierung
% [L,R,P]= showlr(A) fuehrt die L-R-Faktoriserung fuer die Matrix A durch
% [L,R,P]= showlr  benuetzt ein Default-Gleichungssystem
%   Copyright 2002 HSZ-T , Dr. Stefan Adam
  if nargin < 1
%   Default-System
    A =  [  4   4   8  ;  2  -3   9   ; 1    2   2 ] ; 
  end
  format rat; more off; clc
home
disp(' showlr: Ablauf-Demonstration der L-R-Faktorisierung ')
disp(' Start-Matrix:  A ')
  A 
disp('<return> zum Weiterfahren ..'), pause
  [m1, n1] = size(A);  n = max(m1,n1);
  P = eye(n);  L = eye(n);
%
% alle Spalten ausser der letzten, (beginnend mit 1)
for kol = 1:(n-1)
%     ['L' int2str(kol)] = eye(n);
     Ltmp = eye(n);
% Null-Test des Pivot-Kandidaten, ev. vertauschen
  if A(kol,kol) == 0
    [amx,kx] = max(abs(A(kol:n,kol)));
     if amx  == 0
      disp( 'Matrix singulaer!' )
       return
     end
% Absoluter Vertauschungs-Index, statt relativ zu kol
     kx=kx+kol-1;
home
disp([' Zeilenvertauschung noetig: ', int2str(kol) , ' <==> ', int2str(kx) ])
% vertauschen Rest-Zeilen
     hz=A(kol,kol:n);   A(kol,kol:n) = A(kx,kol:n);  A(kx,kol:n) = hz;
% vertauschen rechte Seiten
     hb = b(kol);  b(kol) = b(kx);  b(kx) = hb;
% partielle und dann totale Permutationsmatrix
     PP = eye(n); PP(kol,kol) = 0;  PP(kx,kx) = 0;
     PP(kx,kol) = 1;  PP(kol,kx) = 1;  P = PP*P;
     P
  end
  Aol = A;
% Pivot-Absicherung OK, Kombinationen durchfuehren
% alle Zeilen unterhalb der Diagonalen
  for lin = (kol+1):n
% ~~~Division nur einmal ausf{\"u}hren, da immer dieselbe
    comb = A(lin,kol)/A(kol,kol);
% ~~~ entsprechende Zeilen kombinieren
% ~~~ Element-Aufzaehlung mit impliziter Schleife
    A(lin,kol:n) = A(lin,kol:n) - A(kol,kol:n)*comb;
    Ltmp(lin,kol) = -comb;   R=A;
    clc
home
disp(' showlr: Ablauf-Demonstration der L-R-Faktorisierung ')
Aol 
disp([' Schritt ' int2str(kol) ' ,  Sub-Schritt ' int2str(lin-kol) ...
':  Element A(' int2str(lin) ',' int2str(kol) ')  wird  0 .  ' ])
disp(['      durch A(',int2str(lin),',:) = A(',int2str(lin),':) + (', ...
    num2str(-comb),')*A(',int2str(kol),',:)'   ])
%
    if (kol == n-1 ) & ( lin == n)
      R
    else
      A 
    end
Ltmp
%['L' int2str(kol)] = Ltmp  
    Aol = A;
disp('<return> zum Weiterfahren ..'), pause
  end
%  L akkumulieren mit Rechts-Multiplikation von Ltmp
  L = L*(Ltmp^(-1));
end
% Schluss-Test auf Ann == 0
     if A(n,n)  == 0
       'Matrix singulaer!'
       return
     end
% L-Matrizen zusammenstellen
clc
home
disp(' showlr: Ablauf-Demonstration der L-R-Faktorisierung ')
P
R
L
