code: public static DMatrixRMaj singular(int numRows, int numCols,
                                         Random rand, double ...sv)
      {
          DMatrixRMaj U,V,S;
  
          // speed it up in compact format
          if( numRows > numCols ) {
              U = RandomMatrices_DDRM.orthogonal(numRows, numCols, rand);
              V = RandomMatrices_DDRM.orthogonal(numCols, numCols, rand);
              S = new DMatrixRMaj(numCols, numCols);
          } else {
              U = RandomMatrices_DDRM.orthogonal(numRows, numRows, rand);
              V = RandomMatrices_DDRM.orthogonal(numCols, numCols, rand);
              S = new DMatrixRMaj(numRows, numCols);
          }
  
          int min = Math.min(numRows,numCols);
          min = Math.min(min,sv.length);
          
          for( int i = 0; i < min; i++ ) {
              S.set(i,i,sv[i]);
          }
  
          DMatrixRMaj tmp = new DMatrixRMaj(numRows,numCols);
          CommonOps_DDRM.mult(U,S,tmp);
          S.reshape(numRows,numCols);
          CommonOps_DDRM.multTransB(tmp,V,S);
  
          return S;
      }
docs: <p>
  Creates a random matrix which will have the provided singular values.  The length of sv
  is assumed to be the rank of the matrix.  This can be useful for testing purposes when one
  needs to ensure that a matrix is not singular but randomly generated.
  </p>
  
  @param numRows Number of rows in generated matrix.
  @param numCols NUmber of columns in generated matrix.
  @param rand Random number generator.
  @param sv Singular values of the matrix.
  @return A new matrix with the specified singular values.