Skip to content

LTI_discrete

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

The model has transition and observation distributions

\[ \begin{aligned} x_0 &\sim \mathcal{N}(m_0, C_0), \\ x_{t_{k+1}} &\sim \mathcal{N}(A x_{t_k} + B u_{t_k} + b, Q), \\ y_{t_k} &\sim \mathcal{N}(H x_{t_k} + D u_{t_k} + d, R). \end{aligned} \]

This factory composes LinearGaussianStateEvolution and LinearGaussianObservation into a core DynamicalModel.

Parameters:

Name Type Description Default
A Array

State transition matrix with shape \((d_x, d_x)\).

required
Q Array

Process-noise covariance with shape \((d_x, d_x)\).

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 transition model 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 transition 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 discrete-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 LinearGaussianStateEvolution (state transition) 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 filtering; see Filters and KFConfig in FilterConfigs.

Without this exploitable structure, parameter inference that marginalizes latent trajectories generally falls back to particle filters (PFConfig), 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

Discrete-time LTI model factory
import jax.numpy as jnp
from dynestyx import LTI_discrete

model = LTI_discrete(
    A=jnp.array([[1.0, 0.1], [0.0, 1.0]]),
    Q=0.01 * jnp.eye(2),
    H=jnp.array([[1.0, 0.0]]),
    R=0.05 * jnp.eye(1),
)