function [S,D,info,idx] = EG(A)
//
// Funzione EG: calcola la fattorizzazione LR della matrice A.
//
// A: matrice N x N;
// S, D: fattorizzazione LR di A (S triangolare inferiore con
//       S(k,k) = 1, D triangolare superiore, S D = A);
//
// info = 0: il pivot al passo idx è nullo: la procedura termina prematuramente
//      = 1: la procedura ha determinato la fattorizzazione.
//
// Se info = 0 si pone S = D = [].
//
[NR, NC] = size(A);
N = NR; //
info = 1; // resta tale solo se la procedura termina correttamente
//
for k = 1:N-1, // colonne da 1 a N-1
    if A(k,k) == 0 then
                       info = 0; idx = k;
                       printf("\n *** Errore: pivot nullo al passo %d\n\n",k);
                       S = []; D = [];
                       return;
       else
           for j = k+1:N, // righe da k+1 a N
               A(j,k) = A(j,k) / A(k,k);
               A(j,k+1:N) = A(j,k+1:N) - A(j,k)*A(k,k+1:NC);
           end;
    end;
end;
if info == 1 then
                 D = triu(A);
                 S = eye(A) + tril(A,-1);
end
endfunction
