qit.utils.expv

qit.utils.expv(t, A, v, tol=1e-07, m=30, iteration='arnoldi')

Multiply a vector by an exponentiated matrix.

Approximates \(exp(t A) v\) using a Krylov subspace technique. Efficient for large sparse matrices. The basis for the Krylov subspace is constructed using either Arnoldi or Lanczos iteration.

Parameters
  • t (array[float]) – vector of nondecreasing time instances >= 0, len(t) == s

  • A (array[complex]) – n*n matrix (usually sparse)

  • v (array[complex]) – n-dimensional vector

  • tol (float) – tolerance

  • m (int) – Krylov subspace dimension, m <= n

  • iteration (str) – iteration type, in (‘arnoldi’, ‘lanczos’). Lanczos is faster but requires a Hermitian A.

Returns

result vectors as a (s, n) array, total truncation error estimate, hump size

Return type

array[complex], float, float

The result is \(W[i,:] \approx \exp(t[i] A) v\). The hump size is \(\max_{s \in [0, t]} \| \exp(s A) \|\)

Uses the sparse algorithm from [28].