Post

HODMD(高阶动态模式分解)

标准动态模式分解的改进版本,主要利用高阶Koopman算子假设。

HODMD(高阶动态模式分解)

简介

DMD公式总结

示例

废话不多说,拿个toy来看看HODMD行不行。
这里我构建了一个多模态流体动力学仿真数据集,模拟了二维流场中多个物理模态的叠加演化过程,我将HODMD应用在此叠加的流场数据上,查看分解得到的模态与重构流场。

🦚 数据集基本信息

变量数量: 2个(U: 水平速度分量,V: 垂直速度分量)

空间网格: 60×60 均匀网格,范围 \([-1,1] \times [-1,1]\)

时间维度: 100个时间步,时间步长 \(\Delta t = 0.1\)

数据格式: 4维张量 $\text{Tensor}(2, 60, 60, 100)$

🌊 物理模态构成

数据集包含4个具有不同动力学特性的模态:

模态1: 稳态剪切流
频率: \(f_1 = 0 \text{ Hz}\)(稳态)
增长率: \(\sigma_1 = 0\)(中性稳定)
振幅: \(A_1 = 1.0\)
空间结构: \(U_1(x,y) = \tanh\left(\frac{y}{0.5}\right)\)
\(V_1(x,y) = 0.1\sin\left(\frac{2\pi x}{4}\right)\)

模态2: 低频涡旋
频率: \(f_2 = 0.2 \text{ Hz}\)
增长率: \(\sigma_2 = -0.02\)(轻微衰减)
振幅: \(A_2 = 0.3\) 空间结构: \(U_2(x,y) = -y \cdot \exp\left(-\frac{x^2 + y^2}{0.5}\right)\)
\(V_2(x,y) = x \cdot \exp\left(-\frac{x^2 + y^2}{0.5}\right)\)

模态3: 中频行波
频率: \(f_3 = 0.5 \text{ Hz}\)
增长率: \(\sigma_3 = 0.01\)(轻微增长) 振幅: \(A_3 = 0.2\)
空间结构: \(U_3(x,y) = \sin\left(\frac{2\pi x}{3}\right) \cdot \cos\left(\frac{\pi y}{2}\right)\)
\(V_3(x,y) = \cos\left(\frac{2\pi x}{3}\right) \cdot \sin\left(\frac{\pi y}{2}\right)\)

模态4: 高频振荡
频率: \(f_4 = 1.2 \text{ Hz}\)
增长率: \(\sigma_4 = -0.05\)(较强衰减)
振幅: \(A_4 = 0.15\)
空间结构: \(U_4(x,y) = \sin(8\pi x) \cdot \cos(6\pi y)\)
\(V_4(x,y) = \cos(8\pi x) \cdot \sin(6\pi y)\)

⚙️ 数学表达 每个模态的时间演化遵循:
\(A_m(t) = a_m \cdot e^{(\sigma_m + i2\pi f_m)t}\)

总流场为各模态的线性叠加:
\(U(x,y,t) = \sum_{m=1}^{4} \text{Re}[A_m(t)] \cdot \Phi_m(x,y)\)

其中 \(\Phi_m(x,y) = [U_m(x,y), V_m(x,y)]^T\) 是第m个模态的空间结构。

👻实际模态离散特征值: \(\lambda=e^{(\sigma_m + i2\pi f_m)t}\)

模态 增长率 σ 频率
模态1 1 0
模态2 0.990 0.125
模态3 0.952 0.309
模态4 0.725 0.681

由于上面一个模态有两个空间结构,我这里把它们组成一个矢量,其中值表示模态涡量,并叠加流线矢量图。

图片1 图片2
图片3 图片4

下面是执行HODMD得到的模态结果:

HODMD模态离散特征值: \(\lambda=e^{(\sigma_m + i2\pi f_m)t}\)

模态 增长率 σ 频率
模态1 1 0
模态3 0.952 0.309
模态4 0.725 0.681
模态2 0.990 0.125

左图:离散特征值图;右图:连续特征值图。

图片1 图片2

可见提取出了与实际完全一样的增长率与频率的模态,只是模态不对应,当然这个不对应不是错误,而是实际模态的排序按照振幅进行,而这里HODMD模态的排序略有不同。 下面我们看看重构效果:

图片1 图片2

流场重构误差评估

变量定义

  • 重构流场:\(\mathbf{U}_r = [u_r, v_r]^T\)
  • 原始流场:\(\mathbf{U}_t = [u_t, v_t]^T\)

误差计算过程

1. 分量误差

\(e_u = u_r - u_t\) \(e_v = v_r - v_t\)

2. 误差模场

\(\varepsilon = \sqrt{e_u^2 + e_v^2}\)

3. 误差指标计算

均方根误差: \(\varepsilon_{\text{rms}} = \sqrt{\text{mean}(\varepsilon^2)}\)
最大误差: \(\varepsilon_{\text{max}} = \max(\varepsilon)\)
实际速度模场: \(V_t = \sqrt{u_t^2 + v_t^2}\)
平均实际速度: \(\bar{V}_t = \text{mean}(V_t)\)
相对误差: \(\varepsilon_{\text{rel}} = \frac{\varepsilon_{\text{rms}}}{\bar{V}_t}\)

输出结果

均方根误差\(\varepsilon_{\text{rms}}\) = 2.8709e-14
最大误差\(\varepsilon_{\text{max}}\) = 4.4080e-14
相对误差\(\varepsilon_{\text{rel}}\) = 4.0633e-14

可见重构误差几乎很小,证明了HODMD的分解与重构的实力。

更多细节请查看 : J.M. Vega & S. Le Clainche, “ Higher Order Dynamic Mode Decomposition and Its Applications”, Academic Press, Elsevier, 2020, ISBN 9780128197431.

This post is licensed under CC BY 4.0 by the author.