采用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的方法
- 下一篇: Linux 格式化磁盘命令mkfs