code: public static LinearSolverDense<DMatrixRMaj> leastSquaresQrPivot(boolean computeNorm2 , boolean computeQ ) {
          QRColPivDecompositionHouseholderColumn_DDRM decomposition =
                  new QRColPivDecompositionHouseholderColumn_DDRM();
  
          if( computeQ )
              return new SolvePseudoInverseQrp_DDRM(decomposition,computeNorm2);
          else
              return new LinearSolverQrpHouseCol_DDRM(decomposition,computeNorm2);
      }
docs: <p>
  Linear solver which uses QR pivot decomposition.  These solvers can handle singular systems
  and should never fail.  For singular systems, the solution might not be as accurate as a
  pseudo inverse that uses SVD.
  </p>
  
  <p>
  For singular systems there are multiple correct solutions.  The optimal 2-norm solution is the
  solution vector with the minimal 2-norm and is unique.  If the optimal solution is not computed
  then the basic solution is returned.  See {@link org.ejml.dense.row.linsol.qr.BaseLinearSolverQrp_DDRM}
  for details.  There is only a runtime difference for small matrices, 2-norm solution is slower.
  </p>
  
  <p>
  Two different solvers are available.  Compute Q will compute the Q matrix once then use it multiple times.
  If the solution for a single vector is being found then this should be set to false.  If the pseudo inverse
  is being found or the solution matrix has more than one columns AND solve is being called numerous multiples
  times then this should be set to true.
  </p>
  
  @param computeNorm2 true to compute the minimum 2-norm solution for singular systems. Try true.
  @param computeQ Should it precompute Q or use house holder.  Try false;
  @return Pseudo inverse type solver using QR with column pivots.