Utility functions
CriticalTransitions.normalize_covariance! — Function
normalize_covariance!(covariance) -> Any
Returns $\mathbf{Q}\cdot D/\mathrm{tr}(\mathbf{Q})$, the trace-normalized covariance ($\mathrm{tr} = D$, average eigenvalue 1).
For an SDE built as $\mathrm{d}\mathbf{x} = \mathbf{b}\,\mathrm{d}t + \sigma\sqrt{\mathbf{Q}}\,\mathrm{d}\mathbf{W}$ the SDE only fixes the product $\sigma^2\mathbf{Q} =$ covariance_matrix(sys); this function picks the canonical pair $(\sigma_{\mathrm{eff}}, \mathbf{Q}_{\mathrm{can}})$ defined by $\mathrm{tr}(\mathbf{Q}_{\mathrm{can}}) = D$ (see noise_strength for the matching $\sigma_{\mathrm{eff}}$). Used internally by fw_action, om_action, and geometric_action. For diagonal positive $\mathbf{Q}$ this coincides numerically with dividing by $L_1(\mathbf{Q})/D$.
See Large deviation theory for the rotation-invariance and conversion factors.
CriticalTransitions.DenseEigen — Type
struct DenseEigenDense eigensolver backend: LinearAlgebra.eigen on Matrix(Q).
Returns every eigenpair; fine up to a few thousand cells, becomes infeasible above that because of the dense O(N²) storage. Always applicable.
CriticalTransitions.KrylovKitSolver — Type
struct KrylovKitSolverKrylovKit.eigsolve with shift-invert through LinearSolve.jl.
The workhorse for large sparse problems and for any analysis where the target eigenvalue is not known a priori. Tuning kwargs (tol, krylovdim, maxiter, …) flow to KrylovKit.eigsolve; pass inner_alg to override the LinearSolve algorithm used for the inner shift-invert solve.