Skip to content

LTI_continuous

Build a continuous-time linear time-invariant (LTI) DynamicalModel.

The state evolves according to the SDE and observation model

\[ \begin{aligned} x_0 &\sim \mathcal{N}(m_0, C_0), \\ dx_t &= (A x_t + B u_t + b) \, dt + L \, dW_t, \\ y_t &\sim \mathcal{N}(H x_t + D u_t + d, R). \end{aligned} \]

Here, \(L\) is a diffusion coefficient (not a covariance) with shape \((d_x, d_w)\). It multiplies a \(d_w\)-dimensional Brownian motion \(W_t\) whose increments have identity covariance: \(dW_t \sim \mathcal{N}(0, I_{d_w} \, dt)\). The Brownian motion dimension \(d_w\) is determined by the second dimension of \(L\). Under this convention, the infinitesimal state covariance contributed by the noise term is \(L L^\top \, dt\).

Parameters:

Name Type Description Default
A Array

Drift matrix with shape \((d_x, d_x)\).

required
L Array

Diffusion coefficient with shape \((d_x, d_w)\).

required
H Array

Observation matrix with shape \((d_y, d_x)\).

required
R Array

Observation-noise covariance with shape \((d_y, d_y)\).

required
B Array | None

Optional control matrix in the drift with shape \((d_x, d_u)\). If None, no control term is used and control_dim is set to 0.

None
b Array | None

Optional additive drift bias with shape \((d_x,)\).

None
D Array | None

Optional control matrix in the observation model with shape \((d_y, d_u)\).

None
d Array | None

Optional additive observation bias with shape \((d_y,)\).

None
initial_mean Array | None

Optional initial-state mean \(m_0\) with shape \((d_x,)\). Defaults to zeros.

None
initial_cov Array | None

Optional initial-state covariance \(C_0\) with shape \((d_x, d_x)\). Defaults to identity.

None

Returns:

Name Type Description
DynamicalModel DynamicalModel

A continuous-time LTI state-space model.

Structured inference

This factory is a convenience wrapper: you can construct an equivalent Kalman-filter-friendly model by manually wiring DynamicalModel with an affine drift (AffineDrift), a constant diffusion coefficient, and LinearGaussianObservation (emissions), plus a Gaussian initial condition. Using these structured classes makes the linear/Gaussian structure explicit so dynestyx can dispatch to fast Kalman-style filtering in continuous time; see Filters and ContinuousTimeKFConfig in FilterConfigs.

Without this exploitable structure, parameter inference that marginalizes latent trajectories generally falls back to particle filters (ContinuousTimeDPFConfig / particle-style methods), which are typically slower.

Identifiability and canonical forms

With partial observations, standard LTI parameterizations can be non-identifiable, leading to multi-modal or poorly behaved posteriors. Canonical/minimal parameterizations are often recommended for Bayesian system identification in these settings; see Canonical Bayesian Linear System Identification.

Example

Continuous-time LTI model factory
import jax.numpy as jnp
from dynestyx import LTI_continuous

model = LTI_continuous(
    A=jnp.array([[0.0, 1.0], [-1.0, -0.2]]),
    L=0.1 * jnp.eye(2),
    H=jnp.array([[1.0, 0.0]]),
    R=0.05 * jnp.eye(1),
)