采用POD以及DMD方法实现圆柱绕流流动分解(DMD篇)
前言
此文是采用POD以及DMD方法实现圆柱绕流流动分解(POD篇)的姊妹篇,本打算合成一篇来写,感觉篇幅太长,因此将本文单独拆出,以飨读者。
上文讲了POD方法降阶处理圆柱绕流问题,POD方法的实质是将随时间变化的原始信号(流场)投影到一组随时间变化的,相互正交的空间信号(流场)的叠加。分解后的模态正交性是其最大的特点。为了保证空间模态的正交性,所对应的时间系数序列有时会包含多个频率成分,分解后的各阶模态有时候很难去解释,这也是它较大的局限所在;此外,分解后的模态尝尝按照能量大小进行排序,未考虑各模态的动态特性的影响。
而DMD方法则可以得到的每阶模态对应单一频率,进而可分析单一流动行为的具体特征和变化规律。DMD 的基本思路是将流动演化视为线性动力学过程,通过分析流动过程中的流场快照得到各阶模态。该方法基于一个最佳拟合流场动态特性的线性算子,将流场分解成若干具有单一特征频率和增长/衰减率的模态, 进而得到流场在时间和空间的主要特征。 当然DMD方法也存在很多问题,比如说特征值排序问题,有兴趣的同学可以看下Brunton大神的相关参考文献。
DMD方法
关于圆柱绕流案例的详细参数,在采用POD以及DMD方法实现圆柱绕流流动分解(POD篇)中已经详细介绍,这里就不再赘述。经典DMD算法的代码详见下面的代码块。DMD相关基础知识的学习可以参见大佬hyhhyh21相关博文内容,讲解的非常清楚,看完后代码就可以自己写出来,向大佬致敬!
function [Dd,b,Phi,Time_DMD,Energy]=DMD_CLASS_M(X,Y) %by mingbule 2022.2.22 %DMD经典算法 %输入变量X,Y分别为时空矩阵Uxt的1~N-1列以及2~N列 %输出变量Db为经过DMD分解后排序过的特征值 %输出变量b为模态对应的初始结果,与模态相乘后可得初始结果Ux1 %输出变量time_DMD为分解后的时间序列(已排序) %输出变量Phi为DMD分解后的模态结果(已排序) %输出变量Energy为DMD分解后的模态能力值(已排序) N=size(X,2); %Step1:对X进行svd分解 [U,S,V]=svd(X,'econ'); Sd=diag(S);%将N-1*N-1对角矩阵转换为N-1列矩阵 r=sum(Sd>1e-6);%筛选出奇异值大于1e-6的数量,逻辑变量求和,避免存在接近0值使得计算出现问题 U=U(:,1:r); S=S(1:r,1:r); V=V(:,1:r); %Step2:获得转换矩阵A A=U'*Y*V/S; %Step3:求矩阵A的特征向量及特征值 [Om,La]=eig(A); Dd=diag(La); %Step4:计算DMD模态 Phi=Y*V/S*Om; %Step5:计算模态对应的初始值b b=Phi\X(:,1); %Step6:模态排序(按照能量大小排序) Q=Dd.^(0:N-1);%建立范德蒙矩阵来储存特征值变化 Time_DMD=b.*Q;%获取模态对应的时间系数 Energy=zeros(size(Phi,2),1); for k=1:size(Phi,2)Uxt_DMD_k=real(Phi(:,k)*Time_DMD(k,:));Energy(k)=sum(sum(Uxt_DMD_k.^2)); end [Energy,index]=sort(Energy,'descend'); Dd=Dd(index); b=b(index); Phi=Phi(:,index); Time_DMD=Time_DMD(index,:); end后处理结果
模态分解结果
DMD1阶模态,与POD分解中的平均流场一致
DMD2阶模态(对应POD1阶)
DMD4阶模态(对应POD3阶)
DMD6阶模态(对应POD5阶)
DMD8阶模态(对应POD7阶)
DMD10阶模态(对应POD9阶)
可以看出,上述圆柱绕流流动经过DMD分解得到的模态结果与POD方法得到的模态基本一致,这也与文献【2】中的结论一致(虽然大多数情况下,两者的分解结果不同)。
前6阶模态流场恢复
特征根分布
频率-衰减率分析
频率-能量图
衰减率-能量图
后处理的方法与POD方法基本类似,因此代码就不再贴出,大家掌握了POD的处理方法,可以自己尝试着写出这些后处理的代码。
需要指出的是,DMD方法存在一个特征值排序的问题,目前没有非常通用的方法排序方法,比如某个模态初始的能量很高,但它衰减比较快,可能一定时间后就不太显著,但本文中后处理多个分析图可知,具有较大能量的前几阶模态衰减率为零,稳稳的分布在单位圆上,而许多低能量的高阶模态则分布在圆内,表示随着时间变化而衰减。感兴趣的同学可以尝试着对各阶模态的能量进行排序。由频率图可知,DMD方法可以对每个模态对应单一频率,能够更方便地识别流动结构,分析流动机理。
通过这两篇文章的案例以及文献【3,4】中的典型信号处理案例,相信大家可以比较清晰的掌握POD以及DMD这两种模型降阶方法,在此基础之上,有特殊需求的同学可以就相关知识进行更加深入的学习。在这里权当抛砖引玉,期待与大家交流~
参考文献1234
J.N. Kutz, S.L. Brunton, B.W. Brunton, J.L. Proctor, Dynamic mode decomposition: data-driven modeling of complex systems, SIAM2016. ↩︎
K. Taira, M.S. Hemati, S.L. Brunton, Y. Sun, K. Duraisamy, S. Bagheri, S.T. Dawson, C.-A. Yeh, Modal analysis of fluid flows: Applications and outlook, AIAA journal, 58 (2020) 998-1022. ↩︎
利用matlab实现POD分解(在一维信号或二维流场矢量中的应用) ↩︎
利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用) ↩︎
总结
以上是生活随笔为你收集整理的采用POD以及DMD方法实现圆柱绕流流动分解(DMD篇)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 快速查询DB Lock的方法
- 下一篇: 中国第二代支付清算体系