You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.)
The text was updated successfully, but these errors were encountered:
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.
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$iA$ is purely real, i.e. $e^{Bt} b$ where $B = -B^T$ is real skew-symmetric.)
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 whereThe text was updated successfully, but these errors were encountered: