---
kind: concept
slug: dynamic-mode-decomposition
title: Dynamic mode decomposition
summary: >-
  Fits a low-rank linear model to snapshot data, giving spatial modes with a growth rate and frequency each, plus amplitudes that evolve in time. Variants differ in how the operator is computed and how the rank is chosen. The one card here uses a randomized SVD and an error-minimising rank search; its errors are in-sample.
tags: [reduced-order-modeling, fluid-dynamics]
papers: ["2609.17101"]
related: [digital-twin, dimensionality-reduction, surrogate-modeling]
status: draft
updated_at: 2026-11-01
---

## Overview

Dynamic mode decomposition (DMD) takes a sequence of snapshots of a system and
fits a linear operator S that maps each snapshot to the next, in the least-squares
sense [arxiv:2609.17101 §3 eq. 18]. Its eigen-decomposition gives spatial modes.
Each mode has a Ritz value λ_j, which sets a growth rate σ_j and a frequency ω_j
[arxiv:2609.17101 eq. 24]. The reduced model writes the snapshots as a sum of
modes, where each mode's amplitude advances by a factor λ_j per time step
[arxiv:2609.17101 eq. 26]. The rank is the number of modes kept, and that
choice is the main design decision.

## Variants

### Full-size pseudo-inverse

The operator is computed as S = V0⁺ V1 with the Moore–Penrose pseudo-inverse of
the shifted snapshot matrix V0 [arxiv:2609.17101 eq. 19]. The paper says this
is not feasible for high-dimensional data [arxiv:2609.17101 §3]. It is stated
here for reference only; no variant in this wiki uses it.

### SVD-based reduced operator

Factor V0 = UΣWᴴ and work in the rank-k subspace of U [arxiv:2609.17101 eq. 20].
The modes are then Φ = UX, where X is the eigenvector matrix of the reduced
operator [arxiv:2609.17101 alg. 1 step 4]. The paper does not write the reduced
operator in terms of U, Σ and W, so this route is incomplete as printed
[arxiv:2609.17101 alg. 1 step 3]. Card: [Bistrian (2026), randomized DMD digital twin](/papers/2609.17101).

### Randomized DMD with rank search

This is the variant in the card. The SVD is replaced by a randomized SVD (k-RSVD).
It draws a test matrix with r = min(N_t, 2k) columns, samples the range of V0,
orthonormalises the sample and projects V0 onto it [arxiv:2609.17101 alg. 2].
The rank is chosen by running the procedure for every k from 2 to N_t − 1 and
keeping the k with the smallest time-averaged L2 error over the snapshots
[arxiv:2609.17101 alg. 1 step 1, eq. 27–29]. The selected N_DMD is 15 at Re = 10²
and 20 at Re = 10³ and 10⁴ [arxiv:2609.17101 tab. 1]. Card: [Bistrian (2026), randomized DMD digital twin](/papers/2609.17101).

## When to use which

| Situation | Use | Why |
|---|---|---|
| Snapshot matrix too large for a pseudo-inverse | SVD-based reduced operator, or randomized DMD | The full-size solve is called infeasible for high-dimensional data [arxiv:2609.17101 §3] |
| Number of modes not known in advance | Rank search over all k, with the error of eq. 29 | The paper picks k by minimising error [arxiv:2609.17101 eq. 29]. Offline time is at most about 2 s, on hardware not stated [arxiv:2609.17101 §6] |
| The SVD of V0 is the cost to cut, and a rank-k approximation is acceptable | Randomized SVD | Samples r = min(N_t, 2k) columns [arxiv:2609.17101 alg. 2 step 1]. The paper gives no accuracy comparison with a deterministic SVD |
| A forecast of the mode amplitudes is needed, not only a reconstruction | Add a learned time-series model. The paper uses an NLARX cascade-forward network with 10 hidden units [arxiv:2609.17101 §5] | Its digital twin errors are in-sample, 1.3 × 10⁻⁴ to 8.1 × 10⁻⁴ [arxiv:2609.17101 tab. 2–4] |
| A speed-up over the full simulation is the goal | Do not assume one from this card | The paper reports online time of 8 to 17 s for its model and no full-order run time, on hardware not stated [arxiv:2609.17101 §6, fig. 13] |
| Generalisation to new settings is needed | Test on held-out data before relying on it | All reported errors are in-sample, with no held-out time window, initial condition or Reynolds number [arxiv:2609.17101 §6] |

## Implementation sketch

The core shared by the variants above. Lines marked `not given` are gaps in the
paper and must be chosen by the implementer.

```pseudocode
# Shifted snapshot matrices from snapshots (Nx, Nt + 1)  [arxiv:2609.17101 eq. 12]
V0 = snapshots[:, :-1]   # first Nt columns
V1 = snapshots[:, 1:]    # last Nt columns
# Rank-k factors of V0  [arxiv:2609.17101 eq. 20, alg. 2]
U, Sigma, W = low_rank_svd(V0, k)
# Reduced operator minimising ||V1 - V0 S||  [arxiv:2609.17101 alg. 1 step 3]
S_reduced = reduced_operator(U, Sigma, W, V1)   # not given
# Eigen-decomposition and dynamic modes  [arxiv:2609.17101 alg. 1 step 4]
eigvals, X = eig(S_reduced)
Phi = U @ X
# Growth rate and frequency per mode  [arxiv:2609.17101 eq. 24]
growth = log(abs(eigvals)) / dt
freq = angle(eigvals) / dt   # phase of lambda, see notes
# Amplitudes from the first snapshot  [arxiv:2609.17101 alg. 1 step 5]
amp = project(Phi, V0[:, 0])   # projection rule not given
# Rank selection: smallest mean L2 error over Nt samples  [arxiv:2609.17101 eq. 27–29]
```

Notes for implementers:

- The reduced operator (line 3) is the main gap. The card's reading is that the
  paper never writes S in terms of U, Σ and W.
- The printed frequency in eq. 24 takes the argument of |λ_j|, which is not a
  phase. The card reads the intended formula as the phase of λ_j divided by Δt.
- The randomized SVD's test-matrix distribution and seed are not stated [arxiv:2609.17101 alg. 2 step 1].
- Algorithm 1 step 6 uses a Vandermonde factor up to power N − 2, but N is not defined.

## Contradictions

Within the one card so far:

- **Snapshot count.** Section 2 gives N_t + 1 = 301 snapshots [arxiv:2609.17101 §2]. The Table 1 caption says 300 data snapshots were processed [arxiv:2609.17101 tab. 1].
- **Rank-search method.** Section 6 says GA-SQP and simulated annealing took similar effort [arxiv:2609.17101 §6]. The conclusions say hybrid simulated annealing was used [arxiv:2609.17101 §7]. The method behind Table 1 is not stated.
- **Correlation.** The text says the method gives the best correlation coefficient [arxiv:2609.17101 §6]. Table 1 gives C_DMD = 1.0000 for all three cases, so the metric does not separate them [arxiv:2609.17101 tab. 1].
- **Error normalisation.** The figure captions call the error relative [arxiv:2609.17101 fig. 4–6]. Equation 27 has no normalising term [arxiv:2609.17101 eq. 27].
- **Method name.** The conclusions call the method adaptive randomized DMD [arxiv:2609.17101 §7]. Section 4 describes randomized DMD with a rank search only [arxiv:2609.17101 §4].

## Papers

- [Bistrian (2026), randomized DMD digital twin](/papers/2609.17101): randomized SVD inside DMD, an error-minimising rank search, and an NLARX network for the mode amplitudes, tested on 1D viscous Burgers cases.
