public SVDResult SVD(SVDType svdType = SVDType.Jacobi) { int minRowsCols = Cols < Rows ? Cols : Rows; double[] uout = new double[Rows * minRowsCols]; double[] sout = new double[minRowsCols]; double[] vout = new double[Cols * minRowsCols]; if (svdType == SVDType.Jacobi) { EigenDenseUtilities.SVD(GetValues(), Rows, Cols, uout, sout, vout); } else { EigenDenseUtilities.SVDBdcSvd(GetValues(), Rows, Cols, uout, sout, vout); } return(new SVDResult(new MatrixXD(uout, Rows, minRowsCols), new VectorXD(sout), new MatrixXD(vout, Cols, minRowsCols))); }