采用POD以及DMD方法实现圆柱绕流流动分解(DMD篇)

本文介绍了使用DMD方法对圆柱绕流进行流动分解,作为POD方法的补充,DMD能获得对应单一频率的模态,便于流动行为分析。经典DMD算法步骤包括SVD分解、特征值计算等,并展示了DMD与POD模态的一致性。后处理结果包括模态恢复、特征根分布、频率-衰减率及能量分析,揭示了模态能量与衰减率的关系。文章强调了DMD的频率识别优势,同时指出特征值排序问题,鼓励读者进一步研究和实践。
摘要由CSDN通过智能技术生成

前言

此文是采用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


  1. J.N. Kutz, S.L. Brunton, B.W. Brunton, J.L. Proctor, Dynamic mode decomposition: data-driven modeling of complex systems, SIAM2016. ↩︎

  2. 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. ↩︎

  3. 利用matlab实现POD分解(在一维信号或二维流场矢量中的应用) ↩︎

  4. 利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用) ↩︎

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值