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.

source
CriticalTransitions.DenseEigenType
struct DenseEigen

Dense 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.

source
CriticalTransitions.KrylovKitSolverType
struct KrylovKitSolver

KrylovKit.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.

source