Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvements #10

Open
10 tasks
jagot opened this issue Jun 17, 2021 · 0 comments
Open
10 tasks

Improvements #10

jagot opened this issue Jun 17, 2021 · 0 comments

Comments

@jagot
Copy link
Collaborator

jagot commented Jun 17, 2021

I have a list of things I would like/need, we can split them off into separate issues later.

  • Left and right eigenvectors. For general matrices, the diagonalizing transform is Q*A*Q^{-1}, where Q^{-1}=Q^H only for normal matrices. Inverting the matrix of right eigenvectors Q to find the left is usually illconditioned (and requires you to find all right eigenvectors, otherwise Q is not square). It is then better to explicitly compute the left eigenvectors simultaneously, which leads to two correction equations and requires the action of A^H as well as A. https://doi.org/10.1137/s0895479800373371
  • Custom inner product; for complex-symmetric matrices, one would like to use q^T*B*p instead of q^H*B*P https://doi.org/10.1016/j.apnum.2007.01.019, https://www.research-collection.ethz.ch/handle/20.500.11850/148927
  • I assume simplifications can be made if A is Hermitian, as you alluded to in the chat, @haampie.
  • Iterator interface: similar to how the solvers in IterativeSolvers.jl work, it would be cool if one could get an iterator over the eigenpairs (eigentriples with left vectors as well). This would simplify these things:
    • Sometimes you don't need all the eigenvectors at once, only one or a few at a time.
    • Custom stopping condition, e.g "all eigenpairs with the real part of the eigenvalue smaller than E" or "the first eigenpair that fulfills a custom criterion"
  • Initial nullspace (see Initial null space #7); if the matrix is on the form A = (1 - U*U^H)*M*(1 - U*U^H), we already know that the columns of U belong to the nullspace and can thus be put directly into the set of deflated vectors.
  • Initial subspace; currently this is a random matrix, which sometimes leads to singular exceptions (I sometimes have very ill-conditioned matrices). I don't know how to intelligently pick a better initial subspace than a random one, but maybe there is a way?
  • Blocked version which could possibly help with eigenvalues of higher multiplicity (incidentally, this is probably the cause of the singular exceptions I see). https://doi.org/10.1137/140976017
  • Maybe replace explicit BLAS calls such as gemv! with mul! etc?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant