% Musterlösung
%
% Numerische Mathematik, SS 2013
%
% LR_Zerlegung Spaltenpivotsuche (partial pivot)
%
% Ingolf Busch, Juni 2013

% Input: A     quadratische Matrix


% Output: S  struct mit allen Informationen 
%         S = lr(A)
%
%         L linke untere normierte Dreiecksmatrix
%         R rechte obere Dreiecksmatrix
%         P Permutationsmatrix für Saltenpivotsuche


function [L,R,P,Q] = my_lr_pp(A)



n=size(A,1);

pp = 1:n;

for k = 1:n-1
    
    % Finde Maximum in aktueller Spalte
    [~, rowindex] = max( abs(A(k:n, k)) );
    row = rowindex+k-1;
    
    % Permutiere Maximum auf Hauptdiagonale
    A( [k, row], : ) = A( [row, k], : );
    %Merke dir die Permutation
    pp( [k, row] ) = pp( [row, k] );
    
    %Elimination nach Schulbuchversion
    A((k+1):n,k) = A((k+1):n,k)/A(k,k);
    A((k+1):n,(k+1):n) = A((k+1):n,(k+1):n) - A((k+1):n,k) * A(k,(k+1):n);
end

if(nargout==1)
    L.mode = 'pp';
    L.L    = eye(n)+tril(A,-1);
    L.R    = triu(A);
    L.P    = eye(n);
    L.P    = L.P(pp,:);
else
    L    = eye(n)+tril(A,-1);
    R    = triu(A);
    P    = eye(n);
    P    = P(pp,:);
end