function [Q,R]=GSO(A)

[n,m]=size(A);
Q1(:,1)=A(:,1);
for j=2:m
    Q1(:,j)=A(:,j);
    for i=1:j-1
        x=Q1(:,i); a=A(:,j); qnorm=x'*x;
        if (qnorm~=0)
          Q1(:,j)=Q1(:,j)-(a'*x)/qnorm*x;
        end
    end
end

Q(:,1)=Q1(:,1);
for j=2:m
    Q(:,j)=Q1(:,j);
    for i=1:j-1
        x=Q(:,i); a=Q1(:,j); qnorm=x'*x;
        if(qnorm~=0)
            Q(:,j)=Q(:,j)-(a'*x)/qnorm*x;
        end
    end
end


for i=1:m
    qnorm=Q(:,i);x=(qnorm'*qnorm);
    if(x~=0)
        Q(:,i)=Q(:,i)/(x^(0.5));
    end
end

R=Q'*A;
        
    