% Calcolo della QR con il metodo di Gram-Schmidt Modificato:

function[Q,R]=qr_MGS(A)

n=size(A,2);  % itero sul numero di colonne
for j=1:n
  Q(:,j)=A(:,j);
  for i=1:j-1
    R(i,j) = Q(:,i)'*Q(:,j);  % G.S. Modificato
    Q(:,j) = Q(:,j) - R(i,j)*Q(:,i);
  end;
  R(j,j)=norm(Q(:,j));             % norma 2
  if  R(j,j)==0  break;  end;      % significa che c'è dipendenza lineare
  Q(:,j)=Q(:,j)/R(j,j);            % così Q ha colonne ortogonali e di norma 2 unitaria,
end;                               % e dunque è ortonormale

