-
-
Notifications
You must be signed in to change notification settings - Fork 32
Description
It is pretty common to want to compute unitary matrix exponentials of the form
-
$iA$ is anti-Hermitian (skew-Hermitian), so theishermitian
flag forexpv
cannot be used. - the
t
parameter ofexpv!
is constrained to beReal
for 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
t
can be real or complex, and it is better to chooset
e.g. imaginary andA
hermitian, 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