34 Koopman Theory, DMD, and SINDy
Data-driven discovery of linear models for nonlinear dynamics.
34.1 Koopman Operator Theory
\(\bx^{(k+1)} = \mathbf{F}(\bx^{(k)})\) on \(\mathcal{M} \subseteq \fR^n\).
Observable: Scalar function \(g: \mathcal{M} \to \fR\).
Linear operator acting on observables: \((\mathcal{K}g)(\bx) = g(\mathbf{F}(\bx))\).
Lifting: \(\mathcal{K}\) is linear even if \(\mathbf{F}\) is nonlinear, at the cost of being infinite-dimensional.
Observable \(\varphi\) satisfying \(\mathcal{K}\varphi = \mu \varphi\).
Temporal Evolution: \(\varphi(\bx^{(k)}) = \mu^k \varphi(\bx^{(0)})\).
Significance: Provides a global linear coordinate system for nonlinear dynamics.
34.2 Dynamic Mode Decomposition (DMD)
Finds the best linear fit \(\bY \approx \bA\bX\) for snapshot matrices: \[ \begin{align} \bX = [\bx^{(0)} ... \bx^{(m-1)}], \quad \bY = [\bx^{(1)} ... \bx^{(m)}]. \end{align} \]
Compute truncated SVD: \(\bX \approx \bU_r \bsigma_r \bV_r^T\).
Construct \(r \times r\) reduced operator: \(\tilde{\bA} = \bU_r^T \bY \bV_r \bsigma_r^{-1}\).
DMD eigenvalues \(\{\lambda_i\}\) and modes \(\{\boldsymbol{\phi}_i\}\) are recovered from \(\tilde{\bA}\).
Interpretation: DMD decomposes data into spatiotemporal modes \(\boldsymbol{\phi}_i\) with associated frequencies and growth rates. It is the data-driven approximation of the Koopman operator using the identity dictionary.
34.3 SINDy: Sparse Identification
Identifies governing equations \(\dot{\bx} = \mathbf{\Xi}^T \boldsymbol{\Theta}(\bx)\) where \(\boldsymbol{\Theta}\) is a library of candidate functions (monomials, sin, etc.).
STLS Algorithm: Sequential Thresholded Least Squares. Iteratively solves least squares and thresholds small coefficients to promote sparsity.
Outcome: Parsimonious, interpretable models (e.g., recovering Lorenz equations).
34.4 Exercises
Prove the linearity of the Koopman operator.
Implement DMD for a 2D damped oscillator. Verify the identified eigenvalues.
Build a polynomial library \(\boldsymbol{\Theta}\) for \(\bx \in \fR^2\) up to degree 2.
Use SINDy (via STLS) to identify the Lotka-Volterra predator-prey model from noisy data.
For any state \(\bx \in \mathcal{M}\), observables \(g, h\), and scalars \(\alpha, \beta\), consider the action of \(\mathcal{K}\) on the linear combination: \[ \begin{align} [\mathcal{K}(\alpha g + \beta h)](\bx) &= (\alpha g + \beta h)(\mathbf{F}(\bx)) \\ &= \alpha g(\mathbf{F}(\bx)) + \beta h(\mathbf{F}(\bx)) \\ &= \alpha (\mathcal{K}g)(\bx) + \beta (\mathcal{K}h)(\bx) \\ &= [\alpha \mathcal{K}g + \beta \mathcal{K}h](\bx). \end{align} \] Since this holds for all \(\bx\), \(\mathcal{K}(\alpha g + \beta h) = \alpha \mathcal{K}g + \beta \mathcal{K}h\).