function x = pivLR(A,b)

% Function per il metodo di eliminazione di Gauss 
% con pivoting parziale.
%
%  x = pivLR(A,b)
%
% per risolvere il sistema lineare
%  
% A*x = b
                  
[n,m]=size(A);

if(n~=m), 

   disp('Errore: La matrice deve essere quadrata'),
   return, 

end

for j = 1:n-1

% Calcola il pivot
  S  = A(j:n,j);  
  [m,k] = max( abs(S) );   % m e' il valore del pivot
                           % k e' l'indice di riga del pivot 
                           % relativamente al vettore colonna S.

  if (m==0),
     error('La matrice dei coefficienti e'' singolare'),
  end


  k = k + j - 1;   % questo e' l'indice di riga del pivot 
                   % all'interno di A.


% Scambia le righe di A e di b (ovvero le equazioni)
  A([j k],:) = A([k,j],:);
  b([j k])   = b([k j]);


  for i=j+1:n 

     lij = A(i,j)/A(j,j);

     for k = j+1:n
        A(i,k)=A(i,k)-lij*A(j,k);
     end

     b(i) = b(i) - lij*b(j);
  end

end

if (A(n,n)==0), 
     error('La matrice dei coefficienti e'' singolare'), 
end

% Risoluzione del sistema triangolare superiore ottenuto
% mediante sostituzioni successive all'indietro

x(n) = b(n)/A(n,n); 

x= x(:); % Rende x un vettore colonna 

for i=n-1:-1:1

   x(i) = b(i);

   for j=i+1:n
     x(i) = x(i) - A(i,j)*x(j);
   end

   x(i) = x(i)/A(i,i);

end    

return
