Пример #1
0
        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)));
        }