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
)

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.

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 the same gradients as the chosen ode_method.

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.