function x=subrev(A,b)
 // Mat01032 Calculo Numerico A - UFRGS
 // solucao de Ax=b via substituicao reversa
 // A deve ser triangular superior e nao-singular
 x=zeros(b); n=size(A,1);
  if n~=size(A,2) 
    error('matriz A deve ser quadrada');
  end
  if n~=length(b)
    error('A e b tem dimensoes incompativeis');
  end
  for i=n:-1:1  // substituicao reversa
    x(i)=(b(i)-A(i,i+1:n)*x(i+1:n))/A(i,i);
  end
 // numero de operacoes ponto flutuante: n^2
endfunction
