private bool extractSeparate(int numCols) { if (!computeEigenValues()) { return(false); } // ---- set up the helper to decompose the same tridiagonal matrix // swap arrays instead of copying them to make it slightly faster helper.reset(numCols); diagSaved = helper.swapDiag(diagSaved); offSaved = helper.swapOff(offSaved); // extract the orthogonal from the similar transform V = decomp.getQ(V, true); // tell eigenvector algorithm to update this matrix as it computes the rotators vector.setQ(V); // extract eigenvectors if (!vector.process(-1, null, null, values)) { return(false); } // the ordering of the eigenvalues might have changed values = helper.copyEigenvalues(values); // the V matrix contains the eigenvectors. Convert those into column vectors eigenvectors = CommonOps_DDRM.rowsToVector(V, eigenvectors); return(true); }
private bool extractTogether() { // extract the orthogonal from the similar transform V = decomp.getQ(V, true); // tell eigenvector algorithm to update this matrix as it computes the rotators helper.setQ(V); vector.setFastEigenvalues(false); // extract the eigenvalues if (!vector.process(-1, null, null)) { return(false); } // the V matrix contains the eigenvectors. Convert those into column vectors eigenvectors = CommonOps_DDRM.rowsToVector(V, eigenvectors); // save a copy of them since this data structure will be recycled next values = helper.copyEigenvalues(values); return(true); }