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

cisv(t, A, b) to compute exp(im*A*t)*b for Hermitian A? #176

Open
stevengj opened this issue Jul 14, 2024 · 1 comment
Open

cisv(t, A, b) to compute exp(im*A*t)*b for Hermitian A? #176

stevengj opened this issue Jul 14, 2024 · 1 comment

Comments

@stevengj
Copy link

stevengj commented Jul 14, 2024

It is pretty common to want to compute unitary matrix exponentials of the form $e^{iAt}b$ for Hermitian matrices $A$. It would be nice to have a method that takes advantage of $A$ being Hermitian here, and right now this doesn't seem to exist:

  • $iA$ is anti-Hermitian (skew-Hermitian), so the ishermitian flag for expv cannot be used.
  • the t parameter of expv! is constrained to be Real for some reason, so you can't use expv(im*t, A, b)

The simplest approach to improving this would just be to allow t to be complex (or even an arbitrary Number type). Offhand, I don't see anything in the algorithm that requires it to be Real? That way, you could immediately take advantage of A being Hermitian in using a tridiagonal eigensolver as well as in the Krylov procedure (via Lanczos).

  • (This is how KrylovKit.jl does it: The time parameter t can be real or complex, and it is better to choose t e.g. imaginary and A hermitian, then to absorb the imaginary unit in an antihermitian A. For the former, the Lanczos scheme is used to built a Krylov subspace, in which an approximation to the exponential action of the linear map is obtained.)

For dense matrix exponentials, Julia exports an optimized Hermitian method for cis(A) = exp(im*A). It would be natural to expose an analogous cisv(t, A, b) that computes exp(im*A*t)*b as well, and which under the hood calls exp(im*t, A, b) to exploit Hermitian A.

(An alternative is to have optimized expv methods for skew-Hermitian matrices, ala SkewLinearAlgebra.jl, but this seems like it would take more work. The main advantage of this would be to speed up the case where $iA$ is purely real, i.e. $e^{Bt} b$ where $B = -B^T$ is real skew-symmetric.)

@ChrisRackauckas
Copy link
Member

I'm definitely not opposed to it. Someone just needs to implement it. It's only missing because we haven't ran into it yet, but it's a good self-contained project.

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

2 participants