function H=qrh(H)
%
% H=qrh(H)
%
%     Copyright: Eduardo Casas (Octubre, 1999)
%
% Esta funci�n realiza una iteracci�n del algoritmo QR aplicado a
% una matriz Hessenberg superior H, obteniendo a su vez otra matriz
% Hessenberg superior semejante a la primera.
%
n=size(H,1);
c=[];s=[];n1=n-1;
for j=1:n1
   j1=j+1;
   if H(j1,j) == 0
      c=[c;1];
      s=[s;0];
   else
      nx=norm(H(j:j1,j));
      c1=H(j,j)/nx;
      s1=-H(j1,j)/nx;
      c=[c;c1];
      s=[s;s1];
      H(j,j)=nx;
      H(j1,j)=0;
      H(j:j1,j1:n)=[conj(c1) -conj(s1);s1 c1]*H(j:j1,j1:n);
   end
end
for j=1:n1
   j1=j+1;
   if c(j) ~= 1 | s(j) ~= 0 
      H(1:j1,j:j1)=H(1:j1,j:j1)*[c(j) conj(s(j));-s(j) conj(c(j))];
   end
end