Source code for probnum.statespace.sde_utils

"""Continuous-time transition utility functions."""


import numpy as np
import scipy.linalg


[docs]def matrix_fraction_decomposition(driftmat, dispmat, dt): """Matrix fraction decomposition (assuming no force).""" dim = len(driftmat) if dispmat.ndim == 1: dispmat = dispmat.reshape((-1, 1)) Phi = np.block( [ [driftmat, dispmat @ dispmat.T], [np.zeros(driftmat.shape), -driftmat.T], ] ) M = scipy.linalg.expm(Phi * dt) Ah = M[:dim, :dim] Qh = M[:dim, dim:] @ Ah.T return Ah, Qh, M