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 lastly H₀ and summing the resulting states. This is in contrast to summing up the terms of H(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:
Renamed QuantumPropagators.Controls to QuantumControl.Generators
Add hamiltonian and liouvillian functions. The latter was moved from QuantumControlBase.
New API documentation (generated)
Add page "Dynamical Generators" to the documentation
Change return type of getcontrolderiv: it now returns a generator, which then can be converted into an Operator via evalcontrols
Introduce "control amplitudes" concept within the new Generator type
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