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.)
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:
ishermitianflag forexpvcannot be used.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
tto be complex (or even an arbitraryNumbertype). Offhand, I don't see anything in the algorithm that requires it to beReal? That way, you could immediately take advantage ofAbeing Hermitian in using a tridiagonal eigensolver as well as in the Krylov procedure (via Lanczos).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 analogouscisv(t, A, b)that computesexp(im*A*t)*bas well, and which under the hood callsexp(im*t, A, b)to exploit HermitianA.(An alternative is to have optimized$iA$ is purely real, i.e. $e^{Bt} b$ where $B = -B^T$ is real skew-symmetric.)
expvmethods 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