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); }