POD(Proper Orthogonal Decomposition,本征正交分解)
数据预处理
考虑现在有一个二维速度场 q=(u,v) ,然后通过仿真或者实验获得这个二维速度场的数据
qij=(uij,vij)=(u(ξi,ηj),v(ξi,ηj))
其中 (ξi,ηj) 是空间离散网格点坐标,i=1,⋅⋅⋅,mξ ,j=1,⋅⋅⋅,mη ,下图为该二维速度场均匀网格点上的离散速度数据示意图
假设在 t=tk 时刻,得到了一组数据并将其堆叠成一个列向量 x(tk) ,并把这个大小为 2mξmη×1 的列向量设为 m×1 的列向量
u11⋮u1mη⋯⋱⋮umξ1⋮umξmηv11⋮v1mη⋯⋱⋯vmξ1⋮vmξmηt=tkunstack⇀↽stack u11⋮u1mη⋮unξ1⋮umξmηv11⋮v1mη⋮vmξ1⋮vmξmηt=tk≡x(tk)∈Rm
现收集到一系列时间快照(snapshot)(t1t2⋯tn) 的流场数据,并把每一时刻对应的数据整理成上述的列向量,从而构造出一组数据矩阵 x
x=[x(t1)x(t2)⋯x(tn)]∈Rm×n
通常情况下,我们只会考虑流场的速度脉动,所以矩阵 X 需要减去一个时间均值,即
xˉ(t)=n1i=1Σnx(ti)
X=x−[xˉ(t)xˉ(t)⋯xˉ(t)]
分解算法
POD分解把上述矩阵分解为空间分量和时间分量
Xm×n=rΣar(t)ϕr(ξ)
其中 a(t) 表示时间系数,ϕ(ξ) 表示空间模态,ξ 表示空间向量,m 是参数的个数,n 是时间快照的个数
也可以用矩阵表示
Xm×n=ΦΣΨT
其中 Φ 为空间模态,Σ 为幅值,Ψ 为 temporal dynamics 描述了时间上的演变
POD 分解的目的就是找到一组最优的基向量能够最好地描述这个数据矩阵,这个组基向量就是 ϕ
并且 ϕ 就是求协方差矩阵 XXT∈Rm×m 的特征向量
准确地讲,协方差矩阵是 n1XXT 或者是 n−11XXT ,但前面的系数并不会影响特征向量的求解,系数会作用在特征值上
XXTϕ=λϕ
且 Φ 是单位正交矩阵,即 ϕ 模长唯1,两两正交
特征值 λi 表示每个时刻的观测量在特征向量 ϕi 上的投影点到原点距离的平方和,再开根号
The eigenvalues λi convey how well each eigenvector ϕi captures the original data in the L2 sense (scaled by n)
L2 是向量的2范数,是向量元素平方和的平方根,用于衡量向量的长度或大小
这里可以看一下第一个视频
对于一个速度矩阵,特征值 λ 可以衡量动能,λ=σ2 奇异值 σ 对应着幅值,且是一个速度矩阵,幅值的平方就可以衡量能量
通常为了数据降维,只保留能量较大的几个模态,剩余的皆可舍去,这里假设前 3 个模态能量占主要,即
i=1Σnλii=1Σ3λi=i=1Σnσi2i=1Σ3σi2=99%≈1
只需要留下前三个模态即可
Spatial (Classical) POD Method 和 Method of Snapshots
这两种方法没有太大区别,本质上就是比较 XXT 和 XTX 两个矩阵的大小
如果 m<n 则矩阵 XXT∈Rm×m 维度小,就使用 XXT 矩阵求模态和特征值 λ ,是 Spatial (Classical) POD Method
如果 m>n 则矩阵 XTX∈Rn×n 维度小,就使用 XTX 矩阵求模态和特征值 λ ,是Method of Snapshots
这就是求矩阵 X 奇异值分解的步骤,因此可以直接使用奇异值分解
对 POD 分解的每一个矩阵的讨论
Xm×n=ΦΣΨT=UΣVT
这里为方便表示,使用 U 表示模态,V 为 temporal dynamics
X=[u1u2⋯um]σ10⋮0⋮00σ2⋮0⋮0⋯⋯⋱⋯⋱⋯00⋮σr⋮0⋯⋯⋱⋯⋱⋯00⋮0⋮0v1Tv2T⋮vnT
X=[X(t1)X(t2)⋯X(tn)]=σ1u1v1T+σ2u2v2T+⋅⋅⋅+σrurvrT=i=1ΣrσiuiviT=i=1Σrui(σiviT)
为后续解释方便,将矩阵 VT 展开写
V=[v1v2⋯vn]=V11V21⋮Vn1V12V22⋮Vn2⋯⋯⋱⋯V1nV2n⋮Vnn VT=v1Tv2T⋮vnT=V11V12⋮V1nV21V22⋮V2n⋯⋯⋱⋯Vn1Vn2⋮Vnn
可以得出
X(t1)=σ1u1V11+σ2u2V12+⋯+σrurV1r
X(t2)=σ1u1V21+σ2u2V22+⋯+σrurV2r
⋮
X(ti)=σ1u1Vi1+σ2u2Vi2+⋯+σrurVir
从上式可以看出,V temporal dynamics 矩阵的第 i 行代表在第 i 个时间快照每个模态的“权重”,第 j 列代表模态 uj 在每个时间快照上“权重”的变化(时间上的形状), σ 表示相应的幅值
σiviT 对应时间系数 ar(t) ,时间系数矩阵是 ΣVT , ui 对应空间模态 ϕ(ξ)
关于 temporal dynamics 矩阵的应用
假设做实验时获取数据的时间步长是1s,为了更精细描述流场,需要更短的时间步长0.5s,又不想重新做实验,则可以对数据进行插值。
插值有两种选择:
- 直接对原来的数据矩阵 Xm×n 在时间方向(每一行)上进行插值
- 对时间矩阵 ΣVT m×n 每一行进行插(或者对 Vn×n 的每一列/ Vn×nT 的每一行进行插值)
插值完成之后,原矩阵的列数变成对应的时间点数,如 Xm×n --> Xm×2n / Xm×3n
两种方法其实没有太大区别,如果保留全部 POD 模态,基于 POD 的时间插值与直接数学插值本质上是等价的;POD 插值真正有意义的地方,在于只保留前几个主模态时,能够降低矩阵维度,减少一些计算量,具体可参考文献【5】
References
- Principal Component Analysis
- Strang, G. (2023). Introduction to Linear Algebra (6th ed.). Cambridge: CUP.
- 2017-Modal Analysis of Fluid Flows: An Overview
- Peter J. Schmid, Chapter Six - Data-driven and operator-based tools for the analysis of turbulent flows, Advanced Approaches in Turbulence
- Note on the POD-based time interpolation from successive PIV images