%-----------------------------------------------------------------------
%             -------------                             ----------
%             function file                             escalona.m
%             -------------                             ----------
%-----------------------------------------------------------------------
%	----------------------------
%	Escalonamento com Permutacao
%-----------------------------------
%
%
%	Chamada do procedimento escalona
%---------------------------------------
%       [U,x] = escalona(B)
%
%
%	Resolucao do Sistema Linear      A.x = b
%-----------------------------------------------
%
%	Reducao a um Sistema Triangular Superior Equivalente
%-----------------------------------------------------------
%
%	B  = [A , b]   :  Matriz Ampliada Associada ao Sistema Linear
%
%	           U   :  Matriz Ampliada Triangular Superior Equivalente
% 
%                  x   :  Solucao do Sistema Linear
%
%-------------------------------------------------------------
%
	function [U,x] = escalona(B)
%-----------------------------------
%
%
	epsilon = 1.0e-10;   %  Precisao para o Teste de Comparacao
%
%	
        [n,m] = size(B);    %   n : dimensao do sistema linear ( m = n+1 )
%
	    U = B;          %  para nao destruir a matriz  B
%
	l=0;
	for k = 1:(n-1)
%
%
%                 Permutacoes  -  elimina a possibilidade de pivo nulo
%                 -----------     ------------------------------------
                  l = k;
		  while ( ( abs(U(k,k)) < epsilon ) & ( l < n ) )
		  l = l + 1;
		  temp = U(k,:);   U(k,:) = U(l,:);   U(l,:) = temp;
		  end
%
%
%	Verifica se a Matriz e' Singular
%---------------------------------------
	if ( abs(U(k,k)) <= epsilon )
	disp('  '), disp('    ')
	error('      Sistema  Singular')
	end
%
%                 Escalonamento
%                 -------------
	          for i = (k+1):n
%
                           pivo  =  U(k,k);
	          multiplicador  =  U(i,k) / pivo;
%
	               for j = k:(n+1)
%
	               U(i,j) = U(i,j) - multiplicador*U(k,j);
%
	               end
	          end
	end
%
%
%
%       Resolucao do Sistema Triangular Superior Equivalente
%-----------------------------------------------------------
        [x] = trisup(U);
%
%
%-----------------------------------------------------------------------
%-----------------------------------------------------------------------
%
%	Petronio Pulino
%	Departamento de Matemática Aplicada - D.M.A
%	IMECC - UNICAMP
%	e-mail: pulino@ime.unicamp.br
%	http://www.ime.unicamp.br/~pulino/MS211/
%
%-----------------------------------------------------------------------
