DMD分解
DMD(动态模态分解)是一种数据驱动的算法,可以用来处理时间序列,用这些时间序列数据构造一个近似的线性动态系统模型,在一定条件下逼近或预测非线性系统的行为,并可以预测未来的行为。
Standard DMD
数据预处理和 POD 算法基本一致(但不必减去平均流场) POD (Proper Orthogonal Decomposition) 即有一组时间快照,时间间隔为 Δt
x1x2⋯xn+1
并假设这组数据可以由线性动态系统产生,即
xk+1=Axk
这个方程类似差分方程求解,具体可以看 求解差分方程 | 哈基启的博客
现在目标是要找到矩阵 Am×m 并求解特征向量和特征值
- 将这组数据分成两组矩阵
Xm×n=[x1x2⋯xn]Xm×n′=[x2x3⋯xn+1]
- 对 X 进行 reduced SVD 分解,r 为矩阵 X 的秩
Xm×n=Um×rΣr×rVr×nT
- 所以矩阵 A 就可以如下表示
A=X′X+=X′VΣ−1UT
其中 X+=VΣ−1UT 时矩阵 X 的伪逆
- 定义 A 的相似矩阵 Ar×r
A=UTAU=UTX′VΣ−1
进行 reduced SVD 分解,并构造矩阵 Am×m 的相似矩阵 Ar×r,是为了在后续求解特征值和特征向量时更加方便,因为原矩阵 Am×m 的维度通常较大
- 计算矩阵 Ar×r 的特征值和特征向量
Aw=λw
并对 Ar×r 进行 EVD 分解
AWr×r=WΛr×r
- 矩阵 A 的特征向量(也是 DMD 的模态 mode)为
ϕ^=Uw
此时定义的 DMD 的模态叫做 projected DMD modes
Exact DMD
现考虑一组数据对 {(x1,y1),(x2,y2),⋅⋅⋅,(xn,yn)} ,将其分成两组矩阵
Xm×n=[x1x2⋯xn]Ym×n=[y1y2⋯yn]
相比于 Standard DMD,Exact DMD 在原始数据上弱化了时序性,只强调 xi,yi 是成对出现
并且 Standard DMD 可以看成 Exact DMD 的特殊情况,即 yk=zk xk=zk−1
Y=AX
现在目标是要找到矩阵 Am×m 并求解特征向量和特征值
剩下的步骤和 1.1 节完全相同,唯一不同的是最后一步定义 DMD 模态
ϕ=λ1YVΣ−1w
也有的定义为
ϕ=YVΣ−1w
两个都表示同一个模态,只是前面的系数不同,此时的模态被称为 Exact DMD modes
证明:ϕ=YVΣ−1w 是 A 的特征向量(前面系数不会影响特征向量所以只用证一个)
X+=VΣ−1UT
A=YX+=YVΣ−1UT=BUT
其中 B=YVΣ−1
A=UTYVΣ−1=UTB
设 Aw=λw ,让 ϕ=Bw
Aϕ=BUTBw=BAw=λBw=λϕ
两种模态的对比
projected DMD modes
ϕ^=Uw
Exact DMD modes (现在一般都采用这种定义)
ϕ=YVΣ−1w
PX 是投影到 X 的列空间上的投影矩阵,ϕ^ 是矩阵 PXA 的特征向量,对应的特征值是 λ ,并且 ϕ^=PXϕ
Xm×n=Um×rΣr×rVr×nT 矩阵 X 进行了 SVD 分解,UTU 是 r×r 的单位矩阵,矩阵 PX=UUT 是投影矩阵,投影到 U 的列空间上,又因为 Um×r 是 C(X) 的一组标准正交基,所以矩阵 PX=UUT 也是投影到 X 的列空间上的投影矩阵。
可以通过最小二乘法理解投影矩阵:
设方程组 Ux=b 无解,可以通过最小二乘法找到 b 在 U 列空间上的投影
Ux=b
UTUx^=UTb
Ix^=UTb
x^=UTb
向量 b 在 U 的列空间上的投影就是向量 P
P=Ux^=UUTb
可以看出 UUT 是投影矩阵
PXAϕ^=(UUT)(BUT)(Uw)=U(UTB)w=UAw=λUw=λϕ^
所以 ϕ^ 是矩阵 PXA 的特征向量
并且
UTϕ=UTBw=Aw=λw
PXϕ=UUTϕ=Uλw=λϕ^
由上式可以看出模态 ϕ^ 是模态 ϕ 在 X 列空间上的投影,且有 UTϕ=λw, UTϕ^=w
又由矩阵 X 的 POD 分解,Um×r 也是 X 的前 r 个 POD 模态,所以也可以理解为模态 ϕ^ 是模态 ϕ 在前 r 个 POD 模态上的投影。
但注意 DMD 的模态没有正交性
结果整理
现在得到了 DMD 模态 ϕ 和对应的特征值 λ ,对应的模态的矩阵为 Φm×r ,特征值写成对角阵 Λr×r
原动态系统为
xk+1=Axk
若 r=m 即 Φm×m 且 Φ 可逆,则该动态系统的解可写为
xk=ΦΛk−1Φ−1x1
但是我们只找到了前 r 个特征向量(模态),所以
xk=ΦΛk−1b
我们需要寻找向量 br×1 ,这个向量可以理解为初始条件在 DMD 模态上的最优投影。
它可以通过以下最小二乘问题求得:
b=argbmin∥x1−Φb∥2
最终
xk=ΦΛk−1b=j=1Σrϕjλjk−1bj
其中 ϕj 是 DMD 模态(矩阵 A 的特征向量),λj 是 DMD 特征值(矩阵 A 的特征值),bj 是模态幅值(mode amplitude)
上面的 DMD 模型是以离散时间步长 Δt 为基础的,即描述动态系统在快照之间的离散演化规律:
xk+1=Axk
若用连续时间微分方程形式来表示系统的演化:
dtdx=Bx
其解为 x(t)=eBtx1=ΦeΩtΦ−1x1=ΦeΩtb 求解微分方程 | 哈基启的博客
其在特征值上的关系为 ω=Δtln(λ)
我们就能将离散时间的 DMD 模型转化为连续时间的动力系统形式,即从
xk=ΦΛk−1b=j=1Σrϕjλjk−1bj
转换为
x(t)=ΦeΩtb=j=1Σrϕjeωjtbj
定义:
第 i 个模态的增长率 gi 和频率 fi 为
gi=ΔtRe{ln(λi)} fi=2πΔtIm{ln(λi)}
其中 Im{ln(λi)}=arg(λi)
最终时间快照序列
X=[x1x2⋯xn]
可以写为
X=ΦDbVand=[ϕ1ϕ2⋯ϕr]b1b2⋱br1⋮⋮1λ1⋮⋮λr⋯⋯λ1n−1⋮⋮λrn−1
Vand 是范德蒙矩阵,bj 是模态幅值(mode amplitude), ϕj 是 DMD 模态(矩阵 A 的特征向量)
References
- On dynamic mode decomposition: Theory and applications
- Dynamic Mode Decomposition (Theory) Youtube
- 2017-Modal Analysis of Fluid Flows: An Overview
- 2018-动力学模态分解及其在流体力学中的应用