Skip to content

dq.method.LowRank

LowRank(
    rank: int,
    ode_method: Method = Tsit5(),
    linear_solver: LinearSolver = LinearSolver.QR,
    perturbation_scale: float = 1e-05,
    *,
    key: PRNGKeyArray,
    is_save_extra_low_rank: bool = False
)

Low-rank method for the Lindblad master equation.

This method solves the low-rank Lindblad master equation by evolving factors m(t) such that $rho(t) = m(t) m(t)^\dagger$, following Goutte, Savona (2025) arxiv:2508.18114. The low-rank method is available via dq.mesolve() by passing method=dq.method.LowRank(...).

Parameters:

  • rank –

    Rank of the low-rank approximation (number of columns of m(t)).

  • ode_method –

    ODE solver used for the low-rank evolution (supported: Tsit5, Dopri5, Dopri8, Kvaerno3, Kvaerno5, Euler).

  • linear_solver –

    Linear solver used for the low-rank evolution. Supported values are LowRank.qr and LowRank.cholesky. Defaults to LowRank.qr. LowRank.cholesky is usually faster but may lead to instabilities.

  • perturbation_scale –

    Regularization parameter for the initialization of the low-rank factors. This appends random orthonormalized states of norm perturbation_scale to avoid \(m^\dag m\) being singular. Defaults to 1e-5.

  • key –

    PRNG key used for random initialization of the low-rank factors.

  • is_save_extra_low_rank –

    If True, dq.Options(save_extra=...) receives the low-rank factor m(t) directly instead of the full-rank density matrix rho(t), avoiding its reconstruction. Defaults to False.

Note

The low-rank factors can be accessed from result.lowrank_states. result.states computes and returns the full-rank density matrices.

Supported gradients

This method supports dq.gradient.Direct, dq.gradient.BackwardCheckpointed (default) and dq.gradient.Forward. These are supported for all ode_method choices accepted by LowRank.

Warning

Differentiation may be unstable and return wrong results or overflow: verify stability before using in production.

Warning

The LowRank.cholesky linear solver may lead to instabilities and the progress bar getting stuck when using single precision.

Warning

The low-rank method is more sensitive to time-step error. If the accuracy does not improve when increasing the rank, consider tightening the tolerances of the chosen ode_method.