本文地址:https://goodgoodstudy.blog.csdn.net/article/details/111873026
动态模式分解
动态模式分解(Dynamic Mode Decomposition,DMD)使用随时间增长、衰减和振荡的相干结构来求解或近似动力学系统。将相干结构称为DMD模式。换句话说,DMD将动力学系统转换为模式的叠加,每个模式的强度由特征值控制。
令人惊讶的是,尽管识别DMD模式和特征值的数学过程是纯线性的,但系统本身却可以是非线性的!
有一个合理的理论基础可以证明非线性系统可以用一组模式和特征值对来描述。在这里不多做讨论,感兴趣的话,可以阅读 Koopman 算子及其与DMD的联系123。
DMD不仅是分析系统内部运行情况的有用诊断工具,而且还可以用于预测系统的未来状态。所需要的只是模式和特征值。
正式描述
考虑一组
n
n
n 个数据对
{
(
x
0
,
y
0
)
,
(
x
1
,
y
1
)
,
…
,
(
x
n
,
y
n
)
}
\{(x_0, y_0), (x_1, y_1), \ldots, (x_n, y_n)\}
{(x0,y0),(x1,y1),…,(xn,yn)},其中
x
i
x_i
xi 和
y
i
y_i
yi 是长度为
m
m
m 的列向量。现在,我们定义两个
m
×
n
m \times n
m×n 矩阵:
X
=
[
x
0
x
1
…
x
n
]
,
Y
=
[
y
0
y
1
…
y
n
]
X = \begin{bmatrix}x_0 & x_1 & \ldots & x_n\end{bmatrix}, Y = \begin{bmatrix}y_0 & y_1 & \ldots & y_n\end{bmatrix}
X=[x0x1…xn],Y=[y0y1…yn]
如果我们将符号
A
A
A 定义为
A
=
Y
X
†
A = YX^{\dagger}
A=YX†
其中
X
†
X^{\dagger}
X†是
X
X
X的伪逆4,则对
(
X
,
Y
)
(X, Y)
(X,Y) 的动态模式分解由
A
A
A 的特征分解给出:即DMD模式和特征值是A的特征向量和特征值。
上面的定义来自 (Tu et al)2 ,被称为 exact DMD。它是当前最通用的定义,可以应用于满足给定要求的任何数据集。
在这篇文章中,我们对A满足(或近似满足)方程
y
i
=
A
x
i
,
∀
i
y_i = Ax_i, \forall i
yi=Axi,∀i的情况最感兴趣:
Y
=
A
X
Y =AX
Y=AX
X
X
X 是一组输入向量,
Y
Y
Y是相应的输出向量集合。 DMD的这种表述非常强大,因为它为分析(和预测)控制方程未知的动力学系统提供了一种便捷的方法。
DMD算法
乍一看,寻找
A
=
Y
X
†
A = YX^{\dagger}
A=YX† 的特征分解的任务似乎没什么大不了的。确实,当
X
X
X 和
Y
Y
Y 的大小合理时,从 Numpy 或 MATLAB 调用pinv
和eig
方法可以解决问题。当
A
∈
R
m
×
m
A \in \mathbb{R}^{m \times m}
A∈Rm×m 确实很大时,特征分解可能变得麻烦。
幸运的是,借助 exact DMD算法,可以将问题分解为如下几个子任务。
-
对 X X X 奇异值分解,可以选择同时执行低阶截断:
X = U Σ V ∗ X =U\Sigma V^∗ X=UΣV∗易知 X † = V Σ − 1 U ∗ , A = Y V Σ − 1 U ∗ X^{\dagger} = V\Sigma^{-1} U^∗, A = YV\Sigma^{-1} U^∗ X†=VΣ−1U∗,A=YVΣ−1U∗. -
计算 A ~ \tilde{A} A~,即将完整矩阵 A A A 投影到 U U U 上:
A ~ = U ∗ A U = U ∗ Y X † U = U ∗ Y V Σ − 1 \tilde{A} = U^*AU = U^*YX^{\dagger}U=U^*YV\Sigma^{-1} A~=U∗AU=U∗YX†U=U∗YVΣ−1 -
计算 A ~ \tilde{A} A~ 的特征值 λ i \lambda_i λi 和特征向量 w i w_i wi:
A ~ W = W Λ \tilde{A}W =W\Lambda A~W=WΛ -
从 W W W和 Λ \Lambda Λ 重构 A A A 的特征分解。 A A A的特征值等于 A ~ \tilde{A} A~ 的特征值。 A A A 的特征向量由 Φ \Phi Φ 的列给出:
A Φ = Φ Λ , Φ = Y V Σ − 1 W A\Phi = \Phi \Lambda,\Phi = YV\Sigma^{-1}W AΦ=ΦΛ,Φ=YVΣ−1W
因为
A Φ = Y V Σ − 1 U ∗ Y V Σ − 1 W = Y V Σ − 1 A ~ W = Y V Σ − 1 W Λ = Φ A \begin{aligned} A\Phi &= YV\Sigma^{-1} U^∗YV\Sigma^{-1}W \\ &= YV\Sigma^{-1}\tilde{A} W \\ &= YV\Sigma^{-1} W \Lambda \\ &= \Phi A \end{aligned} AΦ=YVΣ−1U∗YVΣ−1W=YVΣ−1A~W=YVΣ−1WΛ=ΦA
在参考文献12中可以找到对该算法推导的更深入的解释。以上是 exact DMD模式。
从理论上讲,
Φ
∘
=
U
W
\Phi^\circ = UW
Φ∘=UW 是
Φ
\Phi
Φ 的另一推导,也称为 projected DMD 模式:
A
Φ
∘
=
Y
V
Σ
−
1
U
∗
U
W
=
Y
V
Σ
−
1
W
=
U
U
∗
Y
V
Σ
−
1
W
=
U
A
~
W
=
U
W
Λ
=
Φ
∘
Λ
\begin{aligned} A\Phi^\circ &= YV\Sigma^{-1} U^∗UW \\ &= YV\Sigma^{-1}W \\ &=U U^∗YV\Sigma^{-1} W \\ &= U \tilde{A} W \\ &= U W \Lambda \\ &= \Phi^\circ \Lambda \end{aligned}
AΦ∘=YVΣ−1U∗UW=YVΣ−1W=UU∗YVΣ−1W=UA~W=UWΛ=Φ∘Λ
动态系统
本文仅考虑方程式 Y = A X Y = AX Y=AX 的两种解释。
第一种解释是
A
A
A定义了一个差分方程:
x
i
+
1
=
A
x
i
x_{i + 1} = Ax_i
xi+1=Axi
在这种情况下,算子
A
A
A 动态系统状态
x
i
x_i
xi 在时间上向前迈出了一步。
假设我们有一个时间序列
D
D
D:
D
=
[
x
0
x
1
…
x
n
+
1
]
D = \begin{bmatrix}x_0 & x_1 & \ldots & x_{n+1}\end{bmatrix}
D=[x0x1…xn+1]
其中
x
i
x_i
xi 是在时间步
i
i
i 处定义系统的
m
m
m 维状态的列向量。可以这样定义
X
X
X 和
Y
Y
Y:
X
=
[
x
0
…
x
n
]
,
Y
=
[
x
1
…
x
n
+
1
]
X = \begin{bmatrix}x_0 & \ldots & x_{n}\end{bmatrix}, \quad Y = \begin{bmatrix} x_1 & \ldots & x_{n+1}\end{bmatrix}
X=[x0…xn],Y=[x1…xn+1]
这样,来自
X
X
X和
Y
Y
Y 的每对列向量对应于差分方程式的单次迭代:
Y
=
A
X
Y = AX
Y=AX
使用DMD,计算特征分解
A
Φ
=
Φ
Λ
AΦ=ΦΛ
AΦ=ΦΛ。掌握了DMD模式和特征值,动态系统的状态方程可写成:
x
k
+
1
=
A
x
k
=
Φ
Λ
Φ
†
x
k
x_{k+1} = Ax_k = ΦΛΦ^\dagger x_k
xk+1=Axk=ΦΛΦ†xk
因此系统状态关于时间步
k
k
k 的表达式为:
x
k
=
Φ
Λ
k
Φ
†
x
0
x_k =ΦΛ^kΦ^\dagger x_0
xk=ΦΛkΦ†x0
若离散时间步长为
Δ
t
Δt
Δt,连续时间
t
t
t 中的对应函数为
x
(
t
)
=
Φ
Λ
t
/
Δ
t
Φ
†
x
(
0
)
x(t) = ΦΛ^{t/\Delta t}Φ^\dagger x(0)
x(t)=ΦΛt/ΔtΦ†x(0)
真正令人惊讶的是,仅使用数据就及时定义了显式函数!这是无方程式建模的一个很好的例子。
本文讨论的
Y
=
A
X
Y = AX
Y=AX 的第二种解释是
A
A
A定义了一个微分方程组:
x
˙
=
A
x
\dot{x}= Ax
x˙=Ax
在这种情况下,矩阵
X
X
X 和
Y
Y
Y 将由向量场的
n
n
n 个样本组成:
X
X
X 的第
i
i
i 列是位置向量
x
i
x_i
xi;
Y
Y
Y 的第
i
i
i 列是速度向量
x
˙
\dot{x}
x˙。
在计算DMD之后,时间函数与之前差分方程的情形非常相似。如果
x
(
0
)
x(0)
x(0) 是任意初始条件,而
t
t
t 是连续时间,则
x
(
t
)
=
Φ
exp
(
Λ
t
)
Φ
†
x
(
0
)
x(t) = Φ\exp(Λt) Φ^\dagger x(0)
x(t)=Φexp(Λt)Φ†x(0)
参考文献
Kutz, J. Nathan. Data-driven modeling & scientific computation: methods for complex systems & big data. OUP Oxford, 2013. ↩︎ ↩︎
Tu, Jonathan H., et al. “On dynamic mode decomposition: theory and applications.” arXiv preprint arXiv:1312.0041 (2013). ↩︎ ↩︎ ↩︎
Wikipedia contributors. “Composition operator.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 28 Dec. 2015. Web. 24 Jul. 2016. ↩︎
Wikipedia contributors. “Moore–Penrose pseudoinverse.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 12 May. 2016. Web. 24 Jul. 2016. ↩︎