public virtual FMatrixRMaj getU(FMatrixRMaj U, bool transpose, bool compact)
        {
            U = BidiagonalDecompositionRow_FDRM.handleU(U, false, compact, m, n, min);

            if (compact)
            {
                // U = Q*U1
                FMatrixRMaj Q1 = decompQRP.getQ(null, true);
                FMatrixRMaj U1 = decompBi.getU(null, false, true);
                CommonOps_FDRM.mult(Q1, U1, U);
            }
            else
            {
                // U = [Q1*U1 Q2]
                FMatrixRMaj Q   = decompQRP.getQ(U, false);
                FMatrixRMaj U1  = decompBi.getU(null, false, true);
                FMatrixRMaj Q1  = CommonOps_FDRM.extract(Q, 0, Q.numRows, 0, min);
                FMatrixRMaj tmp = new FMatrixRMaj(Q1.numRows, U1.numCols);
                CommonOps_FDRM.mult(Q1, U1, tmp);
                CommonOps_FDRM.insert(tmp, Q, 0, 0);
            }

            if (transpose)
            {
                CommonOps_FDRM.transpose(U);
            }

            return(U);
        }