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