Open stevengj opened 4 months ago
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.
Allowing t
to be a complex Number
would be a prerequisite for using ExponentialUtilities
as a backend for QuantumPropagators
:
https://github.com/JuliaQuantumControl/QuantumPropagators.jl/issues/86
Absorbing 1im
in A
(the Hamiltonian) isn't really an option in that context
Seems like it would be just a few-line change (+ tests) to change t::Real
to t::Number
.
Yeah, I'll probably try KrylovKit
first, and then when I get around to ExponentialUtilities
, I'll make a PR here (unless someone beats me to it)
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:
ishermitian
flag forexpv
cannot be used.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 arbitraryNumber
type). Offhand, I don't see anything in the algorithm that requires it to beReal
? That way, you could immediately take advantage ofA
being Hermitian in using a tridiagonal eigensolver as well as in the Krylov procedure (via Lanczos).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 analogouscisv(t, A, b)
that computesexp(im*A*t)*b
as well, and which under the hood callsexp(im*t, A, b)
to exploit HermitianA
.(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.)