Пример #1
0
        /// <summary>
        /// QR decomposition
        /// </summary>
        /// <param name="qRType"></param>
        /// <returns></returns>
        public QRResult QR(QRType qRType = QRType.HouseholderQR)
        {
            double[] q = new double[Rows * Rows];
            double[] r = new double[Rows * Cols];

            switch (qRType)
            {
            case QRType.ColPivHouseholderQR:
                double[] p = new double[Cols * Cols];
                EigenDenseUtilities.ColPivHouseholderQR(GetValues(), Rows, Cols, q, r, p);
                return(new QRResult(new MatrixXD(q, Rows, Rows), new MatrixXD(r, Rows, Cols), new MatrixXD(p, Cols, Cols)));

            case QRType.HouseholderQR:
            default:
                EigenDenseUtilities.HouseholderQR(GetValues(), Rows, Cols, q, r);
                break;
            }

            return(new QRResult(new MatrixXD(q, Rows, Rows), new MatrixXD(r, Rows, Cols)));
        }