code: @Nonnull
    @ReturnsMutableCopy
    public Matrix getQ ()
    {
      final Matrix aNewMatrix = new Matrix (m_nRows, m_nCols);
      final double [] [] aNewArray = aNewMatrix.internalGetArray ();
      for (int k = m_nCols - 1; k >= 0; k--)
      {
        final double [] aQRk = m_aQR[k];
        for (int nRow = 0; nRow < m_nRows; nRow++)
          aNewArray[nRow][k] = 0.0;
        aNewArray[k][k] = 1.0;
        for (int j = k; j < m_nCols; j++)
        {
          if (aQRk[k] != 0)
          {
            double s = 0.0;
            for (int i = k; i < m_nRows; i++)
              s += m_aQR[i][k] * aNewArray[i][j];
            s = -s / aQRk[k];
            for (int i = k; i < m_nRows; i++)
            {
              aNewArray[i][j] += s * m_aQR[i][k];
            }
          }
        }
      }
      return aNewMatrix;
    }
docs: Generate and return the (economy-sized) orthogonal factor
  
  @return Q