Calculate an appropriate Krylov subspace dimension (\(k\)) to use in the Lanczos
integrator while keeping the total error in the evolution below a given error tolerance.
Note that you can provide your own estimation of the Hamiltonian spectral range or use the
spectral_range operation to perform that calculation.
- Parameters
spectral_range (Tensor or float) – Estimated order of magnitude of Hamiltonian spectral range (difference
between largest and smallest eigenvalues).
duration (float) – The total evolution time.
maximum_segment_duration (float) – The maximum duration of the piecewise-constant Hamiltonian segments.
error_tolerance (float, optional) – Tolerance for the error in the integration, defined as the Frobenius norm of
the vectorial difference between the exact state and the estimated state.
Defaults to 1e-6.
name (str, optional) – The name of the node.
- Returns
Recommended value of \(k\) to use in a Lanczos integration with a Hamiltonian with a
similar spectral range to the one passed.
- Return type
Tensor
Notes
To provide the recommended \(k\) parameter, this function uses the bound in the error for
the Lanczos algorithm as an estimate for the error. For a single time step this gives
\[\mathrm{error} \leq 12 \exp \left( - \frac{(w\tau)^2}{16 k} \right)
\left (\frac{e w \tau}{ 4 k} \right )^{k}\]
where \(\tau\) is the time step and \(w\) is the spectral range of the Hamiltonian.
As this bound overestimates the error, the actual resulting errors with the recommended
parameter are expected to be (a few orders of magnitude) smaller than the requested tolerance.
References
Examples
>>> graph.estimated_krylov_subspace_dimension_lanczos(
... spectral_range=30.0,
... duration=5e-7,
... maximum_segment_duration=2.5e-8,
... error_tolerance=1e-5,
... name="dim",
... )
<Tensor: name="dim", operation_name="estimated_krylov_subspace_dimension_lanczos", shape=()>
>>> result = qctrl.functions.calculate_graph(graph=graph, output_node_names=["dim"])
>>> result.output["dim"]["value"]
2
See more examples in the How to optimize controls on large sparse Hamiltonians user guide.