function GivensHessenberg1(A)
% Funkcija svodi datu matrice A na gornje Hessenbergovu formu mnozenjem
% Givensovim matricama rotacije

    % Odredjujemo velicinu matrice A
    [m,n]=size(A);

    
    % Anuliramo jedan po jedan element ispod subdijagonale 
    % matrice A 
    for k=2:n-1
        for l=k+1:n
            
            if A(k,k-1)==0 
                % Ovo je specijalni slucaj, kada se ne mogu 
                % primeniti formule, vec se matrica rotacije
                % svodi na matricu permutacije
                alpha=0;
                beta=1;
            else
                % Odredjujemo koeficijente matrice rotacije
                alpha=abs(A(k,k-1))/sqrt(A(k,k-1)^2+A(l,k-1)^2);
                beta=A(l,k-1)/A(k,k-1)*alpha;
            end

            % Gradimo matricu rotacije umetanjem u jedinicnu
            U=eye(size(A));
            U(k,k)=alpha;
            U(l,l)=alpha;
            U(k,l)=-beta;
            U(l,k)=beta;
    
            % mnozimo matricu A matricom U sa desna
            A=A*U;
            % Sada jos zbog ocuvanja slicnosti mnozimo A
            % matricom U' sa leva 
            A=U'*A
            
        end
    end