/** * Find the eigenvalues of sparse matrix by means of a Lanczos-QR method. * * @param A The matrix * @param epsilon The error rate * @return The eigenvalues of the matrix */ public static Solution qrSolve(SparseMatrix<Double> A, double epsilon) { assert (A.rows() == A.cols()); assert (A.isSymmetric()); // It turns out that Lanczos sucks at the easy columns so we remove these // on the first pass final TrivialEigenvalues<Double> trivial = TrivialEigenvalues.find(A, true); if (trivial.nonTrivial == null) { return new Solution(trivial.eigenvalues, new SequenceOfGivens()); } final TridiagonalMatrix tridiag = LanczosAlgorithm.lanczos(trivial.nonTrivial).tridiagonal(); return qrSolve(epsilon, tridiag, trivial); }