Skip to content

cisv(t, A, b) to compute exp(im*A*t)*b for Hermitian A? #176

Description

@stevengj

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.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions