Implement lazy Generator / Operator types #33
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We implement a data structure for a time-dependent generator and a static operator that can be evaluated lazily. That is,
H(t) = H₀ + ϵ₁(t) H₁ + ϵ₂(t) H₂
is applied to a state|Ψ⟩
by first applyingϵ₂(t) H₂
, thenϵ₁(t) H₁
, and lastlyH₀
and summing the resulting states. This is in contrast to summing up the terms ofH(t)
into a single matrix and then applying that to the vector. The lazy approach is significantly faster, by at least a factor of 3, and possibly much more for sparse matrices.This commit also includes some larger changes:
QuantumPropagators.Controls
toQuantumControl.Generators
hamiltonian
andliouvillian
functions. The latter was moved fromQuantumControlBase
.getcontrolderiv
: it now returns a generator, which then can be converted into anOperator
viaevalcontrols
Generator
type