动态模式分解(DMD)实战:从时序数据提取关键动态模式的算法与代码实现
发布时间:2026/9/3 22:04:06来源:尧图网络
简介本资源是面向科研与工程实践者的动态模式分解DMDMATLAB实现工具包适用于流体动力学、信号处理、结构健康监测等领域的高维时序数据分析任务尤其适合具备基础线性代数与MATLAB编程能力的研究生及工程师快速掌握DMD核心算法原理与实操流程。压缩包共3个文件146KB包含一份PDF版算法原理与步骤详解、一个Markdown格式的项目说明文档含调用示例与参数解释以及关键的demo_DMD.m主函数脚本——该脚本完整实现了数据矩阵构建、SVD分解、DMD模态提取、特征值求解、频率与增益计算及重构预测全流程代码注释详尽变量命名规范便于调试、复现与二次开发。目前已有497人学习下载可直接运行验证经典DMD流程亦可作为扩展DMDeDMD或控制DMDcDMD研究的底层框架参考。1. 项目概述从压缩包到数据驱动建模的桥梁最近在整理硬盘时翻到了一个名为“Dynamic Mode Decomposition (DMD).zip”的老文件。这让我想起了几年前当“数据驱动”这个词在流体力学、金融分析甚至神经科学领域开始频繁出现时DMD作为一种从高维时序数据中提取关键动态模式的数学工具是如何迅速成为我们这些从业者工具箱里的“瑞士军刀”的。这个压缩包很可能包含了某个仿真实验的流场快照、股票价格的时间序列或者是一段脑电图信号——它的核心价值在于我们无需知晓背后复杂的物理方程Navier-Stokes方程、Black-Scholes模型或神经元动力学仅凭观测到的数据本身就能挖掘出主导系统演化的低维结构和特征频率。简单来说Dynamic Mode Decomposition动态模式分解是一种强大的数据分析算法。它处理的对象通常是一系列按时间顺序排列的高维数据快照比如视频的每一帧、流体仿真中每个时间步的整个流场速度。DMD的目标是找到一个最佳的线性近似系统来描述这些数据从上一时刻到下一时刻的演化。最终它会输出一组“动态模式”DMD Modes和对应的“特征值”DMD Eigenvalues。每个模式可以理解为一种空间上的相干结构比如流体中的涡旋而其特征值则包含了该模式的增长率/衰减率以及振荡频率。这相当于为复杂的非线性系统找到了一个“指纹”或“身份证”让我们能预测其短期未来行为、识别不稳定因素甚至进行降维控制。无论你是从事计算流体力学CFD的工程师希望从昂贵的仿真数据中提取失稳模态还是量化金融的分析师试图从市场波动中分解出不同时间尺度的驱动因素亦或是从事生物医学信号处理的研究员想要从EEG中分离出与特定认知任务相关的节律理解并掌握DMD都将为你打开一扇新的大门。接下来我将结合多年实战经验拆解DMD从理论核心到代码实现的每一个环节并分享那些在教科书和论文里不会写的“踩坑”实录。2. DMD的核心思想与数学框架拆解要真正用好DMD而不是仅仅当个“调包侠”理解其背后的数学直觉至关重要。我们可以把它想象成给一段动态过程“拍X光片”和“做频谱分析”的结合。2.1 问题定义我们从哪里开始假设我们有一个系统它在不同时刻的状态被我们观测并记录了下来。例如一个包含n个测点的流场我们在m1个等间隔的时间点上进行了测量。我们把每个时刻的状态一个n维的列向量排列起来构成两个数据矩阵X [x₁, x₂, ..., x_m]维度n × mX [x₂, x₃, ..., x_{m1}]维度n × m这里X不是导数而是X中每个向量在时间上向后推移一个时间步的结果。DMD的核心假设是存在一个线性算子A一个n × n的矩阵使得X ≈ A X。也就是说系统近似地由一个线性动力系统x_{k1} A x_k所支配。我们的目标就是找到这个最佳的A。注意这里埋下了DMD的第一个“坑”。这个线性假设对于许多真实非线性系统来说是强烈的近似。DMD的成功在于即使对于非线性系统它也能在数据足够多、且主导动力学是线性的或弱非线性的情况下提取出有效的近似模式。理解其局限性是正确应用的前提。2.2 关键步骤降维与近似直接求解A X X^†其中^†表示伪逆在n很大即状态维度很高如CFD中网格点成千上万时是不现实的因为A太大且可能病态。DMD的巧妙之处在于它通过降维来绕过这个问题。其标准流程通常称为“精确DMD”如下对数据矩阵X进行奇异值分解SVDX ≈ U Σ V^*。这里U是左奇异向量矩阵n × r代表了数据的主要空间模式Σ是奇异值对角矩阵r × r代表了这些模式的重要性V是右奇异向量矩阵m × r代表了这些模式在时间上的系数。r是截断的秩通常由奇异值衰减决定这是降维的关键一步。在降维子空间上构建近似算子将高维算子A投影到U张成的低维空间上得到一个r × r的矩阵ÃÃ U^* A U U^* X V Σ^{-1}。注意这里利用了SVD的性质和伪逆的表达式避免了直接计算巨大的A。对Ã进行特征分解Ã W W Λ。这里Λ是一个对角矩阵其对角线元素λ_i就是DMD特征值W的列是对应的特征向量。λ_i是复数其模长|λ_i|表示对应模式的增长率1或衰减率1其辐角arg(λ_i)决定了模式的振荡频率。重建DMD模式高维空间中的DMD模式Φ可以通过Φ X V Σ^{-1} W来计算。每一个DMD模式φ_i都是一个n维的列向量描述了系统的一种空间相干结构。动态重构有了模式Φ和特征值Λ以及初始振幅b Φ^† x₁我们可以重构任意时刻的数据x_k ≈ Φ Λ^{k-1} b。这提供了一种极其紧凑的数据表示和预测方式。2.3 为什么是SVD一个工程视角的解释很多初学者会问为什么第一步非得是SVD从工程角度看这步有三大好处去噪与降维真实数据总有噪声。通过保留前r个主要的奇异值和向量我们实际上过滤掉了那些能量小、可能代表噪声的分量。这相当于给数据做了一次“主成分分析PCA”只保留最主要的变化方向。解决病态问题直接求X的伪逆可能数值不稳定尤其是当X列不满秩或存在近似线性相关性时。SVD提供了最稳定的伪逆计算方式通过Σ^{-1}。计算可行性将问题从n维可能数万甚至百万降到r维通常几十到几百使得后续的特征值求解在计算上变得轻松愉快。实操心得一秩r的选择是艺术也是科学。选得太小会丢失重要动力学信息选得太大会把噪声也当成模式导致过拟合。我常用的策略是观察奇异值的“肘部”曲线选择能量衰减出现明显平台的位置。另一个实用技巧是结合后续DMD模式的空间结构来判断如果某个模式看起来像随机噪声没有清晰的物理结构很可能就是秩选高了引入了噪声分量。3. 从理论到代码手把手实现标准DMD理解了数学我们来看看如何用代码以Python为例一步步实现它。我会附上详细的注释和每个步骤的意图说明。3.1 数据准备与预处理任何数据分析的第一步都是理解和准备数据。假设我们有一个二维矩阵data其形状为(n, m1)即n个空间点或状态变量在m1个时间点的观测值。import numpy as np import matplotlib.pyplot as plt # 假设 data 已经加载形状为 (n, m1) # n: 状态维度 (例如空间网格点数) # m1: 时间快照数量 print(f数据形状: {data.shape}) # 1. 创建快照矩阵 X 和 X_prime X data[:, :-1] # 从第1个到第m个快照 X_prime data[:, 1:] # 从第2个到第m1个快照 print(fX shape: {X.shape}, X shape: {X_prime.shape}) # 2. 数据预处理去均值可选但推荐 # 对于振荡围绕非零均值的过程减去时间均值有助于DMD捕捉振荡模式本身。 X_mean np.mean(X, axis1, keepdimsTrue) X X - X_mean X_prime X_prime - X_mean注意是否去中心化减去时间均值取决于具体问题。如果系统围绕一个平衡点振荡去中心化是必要的否则DMD会试图用一个模式来拟合这个静态偏移浪费一个模态。如果系统演化本身包含均值漂移如增长过程则不应去中心化。一个简单的判断方法是观察第一个时间快照和最后一个时间快照的均值是否有显著差异。3.2 核心DMD算法实现接下来是算法核心部分。我们将严格按照上一节的数学步骤来实现。def exact_dmd(X, X_prime, rNone, eps1e-10): 精确DMD算法实现。 参数: X: 数据矩阵形状 (n, m) X_prime: 时间偏移数据矩阵形状 (n, m) r: 截断秩。如果为None将根据奇异值阈值自动选择。 eps: 用于判断奇异值是否为零的小阈值。 返回: Phi: DMD模式形状 (n, r) Lambda: DMD特征值一维数组长度 r b: 初始振幅长度 r n, m X.shape # 步骤1: 对X进行奇异值分解 (SVD) U, s, Vh np.linalg.svd(X, full_matricesFalse) # U: (n, min(n,m)), s: (min(n,m),), Vh: (min(n,m), m) # 步骤2: 确定截断秩 r if r is None: # 自动选择保留能量累计超过总能量95%的奇异值或奇异值大于最大奇异值的1e-10倍 cumulative_energy np.cumsum(s) / np.sum(s) r np.argmax(cumulative_energy 0.95) 1 # 同时确保奇异值不为零 r min(r, np.sum(s eps)) print(f自动选择截断秩 r {r}) else: r min(r, len(s)) # 截断SVD矩阵 U_r U[:, :r] # (n, r) S_r np.diag(s[:r]) # (r, r) V_r Vh[:r, :].T # (m, r) 注意np.linalg.svd返回V的共轭转置Vh这里转置回来得到V # 步骤3: 构建降维后的算子 A_tilde # A_tilde U_r^* X_prime V_r inv(S_r) # 利用 进行矩阵乘法inv(S_r)就是对角矩阵的逆即每个对角元素取倒数 S_r_inv np.diag(1.0 / s[:r]) A_tilde U_r.conj().T X_prime V_r S_r_inv # (r, r) # 步骤4: 对A_tilde进行特征分解 Lambda, W np.linalg.eig(A_tilde) # W的列是特征向量 # Lambda: (r,) 复数数组特征值 # W: (r, r) 特征向量矩阵 # 步骤5: 重建高维DMD模式 Phi # Phi X_prime V_r S_r_inv W Phi X_prime V_r S_r_inv W # (n, r) # 步骤6: 计算初始振幅 b # 求解 Phi * b x1 (第一个快照即X的第一列) x1 X[:, 0] b np.linalg.lstsq(Phi, x1, rcondNone)[0] # 最小二乘求解 return Phi, Lambda, b, U_r, S_r, V_r # 调用函数 Phi, Lambda, b, U_r, S_r, V_r exact_dmd(X, X_prime, r20) # 假设我们指定秩为20 print(fDMD模式 Phi 形状: {Phi.shape}) print(fDMD特征值 Lambda (前5个): {Lambda[:5]}) print(f初始振幅 b (前5个): {b[:5]})代码解析与实操要点np.linalg.svd的full_matricesFalse这个参数至关重要。它告诉函数只计算经济型的SVD即不生成完整的(n, n)的U矩阵和(m, m)的V矩阵而是根据min(n, m)来截断。这能极大节省内存和计算时间尤其当n和m都很大时。特征值求解我们使用np.linalg.eig它返回复数特征值和右特征向量。Lambda中的每个值λ_i都对应一个DMD模式Phi[:, i]。最小二乘求振幅使用np.linalg.lstsq求解Φ b ≈ x₁。这里用最小二乘而不用直接求逆b np.linalg.pinv(Phi) x1是因为Phi可能列不满秩或条件数不好最小二乘更稳健。rcondNone参数会让函数使用默认的阈值来自动处理小的奇异值。3.3 结果的可视化与物理解读算出结果只是第一步如何解读它们才是价值所在。我们需要可视化模式和特征值。# 1. 绘制特征值谱特征平面图 plt.figure(figsize(8, 6)) # 绘制单位圆 theta np.linspace(0, 2*np.pi, 100) plt.plot(np.cos(theta), np.sin(theta), k--, alpha0.5, linewidth0.5) # 绘制特征值 plt.scatter(np.real(Lambda), np.imag(Lambda), cnp.abs(b), cmapviridis, s50, alpha0.7) plt.colorbar(label初始振幅 |b|) plt.axhline(y0, colork, linestyle-, linewidth0.5, alpha0.5) plt.axvline(x0, colork, linestyle-, linewidth0.5, alpha0.5) plt.axvline(x1, colorr, linestyle--, linewidth1, alpha0.7, label单位圆 (中性稳定)) plt.xlabel(实部 (增长率)) plt.ylabel(虚部 (频率)) plt.title(DMD特征值谱) plt.axis(equal) plt.grid(True, alpha0.3) plt.legend() plt.show() # 2. 可视化前几个DMD模式的空间结构 (以流体为例假设空间是二维网格) # 假设原始数据是从一个 nx * ny 的网格展开成一维向量的我们需要将模式向量重塑回网格形状。 nx, ny 100, 50 # 示例网格尺寸 num_modes_to_plot 4 fig, axes plt.subplots(2, 2, figsize(12, 10)) axes axes.ravel() for i in range(num_modes_to_plot): mode_i Phi[:, i].reshape(nx, ny) # 将一维向量重塑为二维网格 im axes[i].imshow(np.real(mode_i), cmapRdBu, aspectauto) axes[i].set_title(fDMD模式 {i1}\nλ{Lambda[i]:.3f}, |b|{np.abs(b[i]):.3e}) plt.colorbar(im, axaxes[i]) plt.tight_layout() plt.show() # 3. 时间动态重构与预测 time_steps np.arange(X.shape[1] 10) # 原始时间步 未来10步预测 # 构建Vandermonde矩阵特征值的幂 Vand np.vander(Lambda, Nlen(time_steps), increasingTrue).T # 形状 (len(time_steps), r) # 动态重构: X_recon Phi * diag(b) * Vand # 注意这里Phi是(n,r)b是(r,)Vand是(T,r)。我们需要广播b。 X_reconstructed Phi (b[:, np.newaxis] * Vand.T).T # 结果形状 (n, len(time_steps)) # 可视化某个空间点例如网格中心点的时间序列 point_idx nx//2 * ny ny//2 # 计算一维索引 plt.figure(figsize(10, 5)) plt.plot(time_steps[:X.shape[1]], X[point_idx, :] X_mean[point_idx], bo-, label原始数据, markersize4) plt.plot(time_steps, X_reconstructed[point_idx, :] X_mean[point_idx], r--, labelDMD重构预测, linewidth2) plt.axvline(xX.shape[1]-1, colork, linestyle:, label预测开始) plt.xlabel(时间步) plt.ylabel(状态值) plt.title(单点时间序列DMD重构与预测效果) plt.legend() plt.grid(True, alpha0.3) plt.show()可视化解读要点特征值谱图这是DMD的“诊断仪”。所有点都应落在单位圆内或圆上。落在圆外|λ|1的模式是增长的系统不稳定落在圆内|λ|1的模式是衰减的落在圆上|λ|≈1的模式是中性稳定的代表持续的振荡。点的颜色代表初始振幅大小振幅越大该模式在初始时刻越重要。模式空间图观察模式是否具有清晰的物理结构。例如在流体中我们希望看到成对的涡旋对应行波或驻波结构。如果模式看起来像随机噪声很可能它对应的是噪声或我们选择的秩r过高。时间序列对比这是检验DMD拟合和预测能力的直接方法。在训练区间内预测线之前重构曲线应与原始数据高度吻合。预测部分展示了DMD线性外推的能力对于短期预测通常有效但对于强非线性系统长期预测会迅速偏离。实操心得二关注“共轭对”。对于实值数据DMD特征值和模式总是以共轭对的形式出现λ 和 λ*。在可视化时通常只取其中一个或者将一对共轭模式合并为一个实值的、具有空间驻波或行波特性的模式。在频谱图上它们关于实轴对称。4. DMD的进阶变体与实战场景选择标准“精确DMD”虽然强大但并非万能钥匙。针对不同的数据特点和工程需求衍生出了多种DMD变体。选择正确的变体往往事半功倍。4.1 优化DMD (Optimized DMD)标准DMD分两步先做SVD降维再在低维空间求线性近似。优化DMD将这两步合并直接求解一个优化问题旨在最小化所有快照上的重构误差。其数学形式更复杂但通常能获得更精确的特征值和模式尤其当数据噪声较大或快照数量较少时。在Python中可以使用PyDMD库中的OptDMD类。适用场景数据信噪比低、快照数量有限m较小且对模式精度要求极高的场合。缺点是计算量比标准DMD大。4.2 多分辨率DMD (Multiresolution DMD, mrDMD)许多系统包含多种时间尺度的动力学如湍流中既有大尺度拟序结构也有小尺度涡旋。mrDMD通过递归地对数据进行下采样和应用DMD将不同频率的特征模式分离到不同的“层级”中。这就像给信号做小波变换一样能够清晰地区分快变和慢变成分。适用场景分析具有多尺度特性的复杂系统如气候数据年际振荡与季节变化、金融市场数据长期趋势与短期波动、湍流仿真数据等。它帮助我们避免将不同时间尺度的模式混在一起使物理解读更清晰。4.3 延迟嵌入DMD (Delay-Embedding DMD)对于非线性系统有时当前时刻的状态不足以预测未来。延迟嵌入DMD也称为Hankel-DMD或Extended DMD通过将多个时间延迟的状态堆叠起来构成一个增广的状态向量然后再应用DMD。这借鉴了动力系统理论中“塔肯斯嵌入定理”的思想可以用高维的线性模型来捕捉低维的非线性动力学。适用场景系统表现出较强的非线性或混沌特性且仅凭单步快照无法捕捉其演化规律时。例如分析混沌振荡器的数据、某些生理信号等。4.4 流场专用处理SPOD与DMD的结合在计算流体力学中频谱本征正交分解Spectral POD, SPOD和DMD是两种常用的模态分析方法。SPOD在频域寻找最优正交基而DMD在时域寻找线性演化模式。一个实用的技巧是先对数据进行SPOD滤波去除无关频带的噪声再对滤波后的数据做DMD。这样可以获得更干净、物理意义更明确的DMD模式。实操心得三没有最好的只有最合适的。我个人的选择流程通常是数据质量高、快照多优先尝试标准精确DMD它快速、稳定、解释性强。数据有噪声、想提升精度尝试优化DMD。数据明显有多尺度特征使用多分辨率DMD。系统疑似有强非线性/混沌考虑延迟嵌入DMD。流体力学数据背景噪声复杂先做SPOD预滤波再做DMD。5. 实战避坑指南与常见问题排查纸上得来终觉浅绝知此事要躬行。以下是我在多个项目中应用DMD时踩过的“坑”和总结的排查清单。5.1 模式看起来像噪声没有物理结构可能原因1截断秩r过高。DMD把噪声也当成了低能量模式分解了出来。排查检查奇异值衰减曲线。如果曲线尾部平缓没有明显的“肘点”说明数据本身噪声大或没有明显的低维结构。尝试手动降低r只保留前几个奇异值。解决使用更激进的截断或者采用诸如最优硬阈值Optimal Hard Threshold等方法自动确定秩。可能原因2数据未去中心化。如果数据有一个强的静态背景场如流场中的平均流DMD会用一个模式来拟合这个静态场这个模式看起来就是空间上的均值而其他动态模式的能量被挤压可能混叠在噪声中。排查计算每个空间点的时间序列均值看看是否显著非零且空间分布不均匀。解决对每个空间点的时间序列减去其时间平均值X X - np.mean(X, axis1, keepdimsTrue)然后再进行DMD。可能原因3时间分辨率不当。采样频率Δt不合适。如果采样太快Δt太小相邻快照几乎相同矩阵X条件数极差如果采样太慢Δt太大则违反了DMD的线性演化假设。排查计算相邻快照的相关系数。如果相关系数接近1说明采样过快如果接近0说明采样过慢。解决对数据进行时间下采样或插值调整到合适的Δt。一个经验法则是Δt应使得系统中最快感兴趣模式的相位在一个时间步内变化不至于太大例如不超过π/4。5.2 预测结果迅速发散或衰减可能原因特征值谱包含不稳定模式|λ| 1或数值误差放大。即使真实系统是稳定的由于数据噪声和线性近似误差DMD可能计算出轻微的增长模式在长期预测中会被指数放大。排查仔细查看特征值谱图是否有点明显在单位圆外。解决物理约束如果你从物理上知道系统应该是稳定的可以强制将单位圆外的特征值投影到单位圆上设置其模为1这称为“稳定性DMD”。使用总最小二乘DMDTotal Least Squares DMD标准DMD假设只有X有误差TLS-DMD假设X和X都有误差有时能得到更稳定的结果。仅用于分析不用于长期预测明确DMD的主要优势在于模态分解和机理分析而非长期时间预报。对于预测应考虑结合物理模型或其他非线性方法。5.3 计算内存不足或速度太慢可能原因状态维度n极高例如超过10^6。存储n × n的矩阵A或n × m的数据矩阵X直接导致内存溢出。解决利用稀疏性如果数据矩阵是稀疏的很多零使用scipy.sparse格式存储和进行SVD如scipy.sparse.linalg.svds计算部分奇异值。流式DMD或增量DMD对于实时或超大数据可以采用一次只处理部分数据的算法。GPU加速使用cupy或torch库将数据和SVD计算移至GPU。对于大规模SVDGPU能带来数量级的加速。分布式计算对于超大规模问题如全球气候模拟数据需要考虑在HPC集群上使用分布式SVD算法。5.4 DMD模式与已知物理模态对不上可能原因1数据不满足线性假设。系统本质是非线性的线性近似误差太大。排查计算DMD重构数据与原始数据的相对误差。如果误差在训练区间内就很大说明线性假设不成立。解决尝试非线性DMD变体如Kernel DMD通过核技巧隐式映射到高维线性空间或使用深度学习框架学习非线性映射。可能原因2边界条件或数据预处理的影响。例如在流体中非物理的边界条件会在DMD模式中产生虚假的边界效应。排查观察DMD模式是否在物理边界处出现异常的高值或奇异结构。解决在分析前对数据进行适当的窗函数处理如tapering以减少边界效应或者确保仿真/实验数据本身的边界条件是物理合理的。常见问题速查表问题现象可能原因排查方法解决建议模式像噪声1. 秩r过高2. 数据未去中心化3. 采样率不当1. 检查奇异值曲线2. 检查时空均值3. 计算快照相关性1. 降低r2. 减去时间平均3. 调整采样间隔预测发散存在不稳定模式(λ1)计算慢/内存爆状态维度n太大监控内存使用1. 使用稀疏SVD2. GPU加速3. 增量算法模式不物理1. 非线性强2. 边界效应1. 计算重构误差2. 检查模式边界1. 尝试非线性DMD2. 数据加窗处理6. 超越基础DMD在工程与科研中的创新应用掌握了基础之后我们可以看看DMD如何与其他方法结合解决更前沿的问题。6.1 用于流动控制基于DMD的模型预测控制MPC在主动流动控制中我们需要一个低阶模型来实时预测流场响应并计算控制指令。DMD可以为我们提供这样一个模型。具体步骤是在施加不同控制输入如射流、翼面振动的情况下采集流场快照数据。将控制输入作为扩展状态变量与流场状态一起构成增广状态向量然后对增广系统应用DMD。这样得到的DMD模型就包含了控制输入到流场输出的动态关系。将这个低阶DMD模型嵌入到模型预测控制器的框架中在线求解优化问题计算最优控制律。这种方法的好处是模型直接从实验或高保真仿真数据中学习避免了复杂物理建模特别适用于那些机理尚未完全明晰的复杂流动。6.2 用于数据同化DMD作为观测器的降阶模型数据同化旨在结合物理模型和稀疏观测数据估计系统的完整状态。对于大型系统如数值天气预报运行完整的物理模型计算量巨大。我们可以利用历史数据或离线仿真为系统训练一个DMD降阶模型。在设计卡尔曼滤波器或变分同化系统时使用DMD模型作为动力学子模型代替或辅助完整模型。仅需同化低维DMD模式上的系数大幅减少待估参数提高同化效率。这在实时性要求高的场合如灾害预警非常有前景。6.3 用于机器学习DMD特征作为时序数据的表征在时间序列分类或异常检测任务中特征工程是关键。DMD可以提供一组富有物理或动力学意义的特征特征值系统的本征频率和增长率表征了动态的“指纹”。模式振幅b各模式在初始时刻的强度。模式能量|b|^2或与模式相关的动能。我们可以将这些特征输入到传统的机器学习分类器如SVM、随机森林或深度学习模型中用于设备故障诊断从振动信号中提取失稳模态、癫痫脑电波预警从EEG中提取异常节律模式等。实操心得四DMD是一个“模型发现”的起点而不是终点。它给出的线性模型可能不完美但提取出的模式和频率是极有价值的先验知识。我们可以用这些知识去初始化更复杂的非线性模型参数或者作为物理信息神经网络PINN的约束条件引导模型更快、更准地收敛到真实的物理规律上。把DMD看作探索数据黑暗森林的一盏灯它能照亮主要路径但深处的细节还需要其他工具共同探索。本文还有配套的精品资源点击获取
网站建设高端定制企业官网