-
-
Notifications
You must be signed in to change notification settings - Fork 31
Description
It is pretty common to want to compute unitary matrix exponentials of the form
-
$iA$ is anti-Hermitian (skew-Hermitian), so theishermitianflag forexpvcannot be used. - the
tparameter ofexpv!is constrained to beRealfor some reason, so you can't useexpv(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
tcan be real or complex, and it is better to choosete.g. imaginary andAhermitian, then to absorb the imaginary unit in an antihermitianA. 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