6. 向量自回归和动态模态分解#

本节讲座中,我们将应用在 奇异值分解 中学到的计算方法来研究:

  • 一阶向量自回归 (VARs)

  • 动态模态分解 (DMDs)

  • 一阶向量自回归和动态模态分解之间的联系

6.1. 一阶向量自回归#

我们想要拟合一个一阶向量自回归

(6.1)#\[ X_{t+1} = A X_t + C \epsilon_{t+1}, \quad \epsilon_{t+1} \perp X_t \]

其中,\(\epsilon_{t+1}\) 是一个独立同分布的随机向量序列 \(m \times 1\) 在时间\(t+1\) 的分量,且该序列有零均值向量和单位协方差矩阵;而 \( m \times 1 \) 的向量 \( X_t \) 是:

(6.2)#\[ X_t = \begin{bmatrix} X_{1,t} & X_{2,t} & \cdots & X_{m,t} \end{bmatrix}^\top \]

其中 \(\cdot ^\top \) 表示共轭转置,\( X_{i,t} \) 是时间 \( t \) 时的变量 \( i \)

我们想要拟合方程 (6.1)

我们的数据则存储在一个 \( m \times (n+1) \) 的矩阵 \( \tilde X \)

\[ \tilde X = \begin{bmatrix} X_1 \mid X_2 \mid \cdots \mid X_n \mid X_{n+1} \end{bmatrix} \]

其中对于 \( t = 1, \ldots, n +1 \)时,\( m \times 1 \) 的向量 \( X_t \)(6.2) 给出。

因此,我们想要估计一个系统 (6.1),它由 \( m \) 个最小二乘回归组成,将所有变量所有变量的一阶滞后值进行回归。

(6.1) 的第 \(i\) 个方程是将 \(X_{i,t+1}\) 对向量 \(X_t\) 进行回归。

我们按如下步骤进行。

\( \tilde X \) 中,我们构造以下两个 \(m \times n\) 矩阵

\[ X = \begin{bmatrix} X_1 \mid X_2 \mid \cdots \mid X_{n}\end{bmatrix} \]

\[ X' = \begin{bmatrix} X_2 \mid X_3 \mid \cdots \mid X_{n+1}\end{bmatrix} \]

这里的 \( ' \) 是矩阵 \( X' \) 的名称的一部分,并不表示矩阵转置。

我们使用 \(\cdot^\top \) 来表示矩阵转置或其在复矩阵中的扩展。

在构造 \( X \)\( X' \) 的过程中,我们都从 \( \tilde X \) 中删除了某一列,\( X \) 是删除最后一列,\( X' \) 则是删除第一列。

显然,\( X \)\( X' \) 都是 \( m \times n \) 的矩阵。

我们用 \( p \leq \min(m, n) \) 表示 \( X \) 的秩。

我们感兴趣的两种情况是:

  • \( n > > m \),即时间序列观测值的数量 \(n\) 远大于变量的数量 \(m\)

  • \( m > > n \),即变量的数量 \(m\) 远大于时间序列观测值的数量 \(n\)

在考虑了这两种特殊情况的一般情况中,有一个通用的公式描述了 \(A\) 的最小二乘估计量 \(\hat A\)

但重要的细节有所不同。

这个通用的公式是:

(6.3)#\[ \hat A = X' X^+ \]

其中 \(X^+\)\(X\) 的广义逆矩阵,或伪逆。

关于穆尔-彭罗斯广义逆矩阵的详细信息,请参见穆尔-彭罗斯广义逆矩阵

在我们的两种情况下,广义逆矩阵适用的公式有所不同。

短胖型情况:

\(n >> m\)时,即时间序列的观测值\(n\)远多于变量的数量\(m\),且当\(X\)具有线性独立的时,\(X X^\top\)的逆矩阵存在,且广义逆矩阵\(X^+\)

\[ X^+ = X^\top (X X^\top )^{-1} \]

这里\(X^+\)是一个满足\(X X^+ = I_{m \times m}\)右逆,。

在这种情况下,我们用于估计总体回归系数矩阵\(A\)的最小二乘估计量的公式(6.3)就变为

(6.4)#\[ \hat A = X' X^\top (X X^\top )^{-1} \]

这个计算最小二乘回归系数的公式在计量经济学中被广泛地使用。

它也被用于估计向量自回归。

公式(6.4)的右边,正比于\(X_{t+1}\)\(X_t\)的经验交叉二阶矩矩,乘以\(X_t\)二阶矩阵的逆矩阵。

高瘦型情况:

\(m > > n\)时,即属性数量\(m\)远大于时间序列的观测值\(n\),且当\(X\)线性独立时,\(X^\top X\)的逆矩阵存在,且广义逆矩阵\(X^+\)

\[ X^+ = (X^\top X)^{-1} X^\top \]

这里\(X^+\)是一个满足\(X^+ X = I_{n \times n}\)左逆,。

在这种情况下,我们用于估计\(A\)的最小二乘估计公式(6.3)变为

(6.5)#\[ \hat A = X' (X^\top X)^{-1} X^\top \]

请比较(6.4)(6.5)\(\hat A\)的表达式。

这里我们特别关注公式(6.5)

\(\hat A\)的第\(i\)行是一个\(m \times 1\)的向量,其中包含了\(X_{i,t+1}\)\(X_{j,t}, j = 1, \ldots, m\)回归的系数。

如果我们使用公式(6.5)来计算\(\hat A X\),我们发现

\[ \hat A X = X' \]

因此回归方程完全拟合

这是欠定最小二乘模型中典型的结果。

再次重申,高瘦情况(见奇异值分解)指观测的数量\(n\)相对于向量\(X_t\)属性的数量\(m\)较小时,我们想要拟合方程(6.1)

我们面临着最小二乘估计量是欠定的,且回归方程完全拟合的事实。

接下来,我们想要更加高效地计算广义逆矩阵\(X^+\)

广义逆矩阵\(X^+\)将是我们\(A\)估计量的一个组成部分。

作为对\(A\)的估计量\(\hat A\),我们想要形成一个\(m \times m\)的矩阵,来解决最小二乘最佳拟合问题

(6.6)#\[ \hat A = \textrm{argmin}_{\check A} || X' - \check A X ||_F\]

其中 \(|| \cdot ||_F\) 表示矩阵的Frobenius(或欧几里得)范数。

Frobenius范数定义为

\[ ||A||_F = \sqrt{ \sum_{i=1}^m \sum_{j=1}^m |A_{ij}|^2 } \]

方程(6.6)右侧的最小值解为

(6.7)#\[ \hat A = X' X^{+} \]

其中(可能是巨大的)\( n \times m \) 的矩阵 \( X^{+} = (X^\top X)^{-1} X^\top \) 同样是 \( X \) 的广义逆矩阵。

对于我们感兴趣的一些情况,\(X^\top X \) 可能接近奇异,这种情况会使某些数值算法变得不准确。

为了应对这种可能性,我们将使用高效的算法来构建公式(6.5)\(\hat A\)降秩近似

这种近似方式,让我们的向量自回归估计不再完全拟合。

\( \hat A \) 的第 \( i \) 行是一个 \( m \times 1 \) 的回归系数向量,表示 \( X_{i,t+1} \)\( X_{j,t}, j = 1, \ldots, m \) 的回归。

一种高效计算广义逆矩阵\(X^+\)的方式是从奇异值分解开始

(6.8)#\[ X = U \Sigma V^\top \]

这里我们提醒自己,这个简化SVD中,\(X\)是一个\(m \times n\)的数据矩阵,\(U\)是一个\(m \times p\)的矩阵,\(\Sigma\)是一个\(p \times p\)的矩阵,而\(V\)是一个\(n \times p\)的矩阵。

通过以下一系列等式,我们可以有效地构造相关的广义逆矩阵\(X^+\)

(6.9)#\[\begin{split} \begin{aligned} X^{+} & = (X^\top X)^{-1} X^\top \\ & = (V \Sigma U^\top U \Sigma V^\top )^{-1} V \Sigma U^\top \\ & = (V \Sigma \Sigma V^\top )^{-1} V \Sigma U^\top \\ & = V \Sigma^{-1} \Sigma^{-1} V^\top V \Sigma U^\top \\ & = V \Sigma^{-1} U^\top \end{aligned} \end{split}\]

(由于\(m > > n\),在简化SVD中\(V^\top V = I_{p \times p}\),因此我们可以将前面的一系列等式同时用于简化SVD和完整SVD。)

因此,我们将使用方程(6.8)\(X\)的奇异值分解来构造\(X\)的广义逆矩阵\(X^+\),计算方法为:

(6.10)#\[ X^{+} = V \Sigma^{-1} U^\top \]

其中矩阵\(\Sigma^{-1}\)是通过将\(\Sigma\)中的每个非零元素替换为\(\sigma_j^{-1}\)构造而成。

我们可以将公式(6.10)与公式(6.7)结合使用来计算回归系数矩阵\(\hat A\)

因此,我们对\(m \times m\)的系数矩阵\(A\)的估计量\(\hat A = X' X^+\)为:

(6.11)#\[ \hat A = X' V \Sigma^{-1} U^\top \]

6.2. 动态模态分解(DMD)#

接下来我们将研究一个特殊情况 – 当变量数量\(m >> n\)时的情形。

动态模态分解可以用于处理这种”高瘦型”矩阵。

假设有一个\(m \times (n+1)\)的数据矩阵\(\tilde X\),它包含了比时间周期\(n+1\)多得多的属性(或变量)\(m\)

动态模态分解由[Schmid, 2010]首次提出,

你可以在 [Kutz et al., 2016][Brunton and Kutz, 2019](第7.2节)中阅读有关动态模态分解的内容。

动态模态分解(DMD)的目标是找到最小二乘回归系数矩阵\(\hat A\)的一个低秩近似,其中近似矩阵的秩\(r\)小于原始矩阵的秩\(p\)

这个近似可以通过公式(6.11)来构造。

我们将逐步构建一种适合应用的表示。

我们将通过三种不同的表示方式来描述一阶线性动态系统(即我们的向量自回归),从而实现这一点。

三种表示的指南: 在实践中,我们主要关注表示3。

我们使用前两种表示来呈现一些有用的中间推导,这些步骤有助于我们理解表示3的内在原理。

在应用中,我们将只使用DMD模态的一小部分子集来近似动态。

我们使用这样一个小的DMD模态子集来构建对\(A\)的降秩近似。

为此,我们需要使用与表示法3相关的简化SVD,而不是与表示法1和2相关的完整SVD。

快速指南: 如果您想直接应用这些方法,可以直接跳到表示法3。

第一次阅读时,您可以跳过铺垫性的表示法1和2。

6.3. 表示法1#

在这个表示法中,我们将使用\(X\)完整SVD。

我们使用\(U\)\(m\),即\(U^\top\)\(m\),来定义一个\(m \times 1\)的向量\(\tilde b_t\)

(6.12)#\[ \tilde b_t = U^\top X_t . \]

原始数据\(X_t\)可以表示为:

(6.13)#\[ X_t = U \tilde b_t \]

(这里我们使用\(b\)来提醒自己我们正在创建一个向量。)

由于我们现在使用的是完全SVD,\(U U^\top = I_{m \times m}\)

因此从方程(6.12)可以得出,我们可以用\(\tilde b_t\)重新构造\(X_t\)

特别地,

  • 方程 (6.12) 作为一个编码器,将 \(m \times 1\) 向量 \(X_t\) 旋转成一个 \(m \times 1\) 的向量 \(\tilde b_t\)

  • 方程 (6.13) 作为一个解码器,通过旋转 \(m \times 1\) 向量 \(\tilde b_t\)重新构造 \(m \times 1\) 的向量 \(X_t\)

\(m \times 1\) 的基向量 \(\tilde b_t\) 定义一个转移矩阵:

(6.14)#\[ \tilde A = U^\top \hat A U \]

我们可以通过以下方式表示 \(\hat A\)

\[ \hat A = U \tilde A U^\top \]

\(m \times 1\) 的基向量 \(\tilde b_t\) 的动态由以下方程支配:

\[ \tilde b_{t+1} = \tilde A \tilde b_t \]

为了构建基于 \(X_1\)\(X_t\) 未来值的预测 \(\overline X_t\),我们可以对这个方程的两边应用解码器(即旋转器),从而推导出:

\[ \overline X_{t+1} = U \tilde A^t U^\top X_1 \]

这里我们用 \(\overline X_{t+1}, t \geq 1\) 表示预测值。

6.4. 表示法 2#

这种表示方法与[Schmid, 2010]最初提出的方法有关。

它可以被视为推导表示3的一个中间步骤。

与表示1一样,我们继续:

  • 使用完整SVD而不是简化SVD

奇异值分解课程中我们学到:

  • (a) 对于完整SVD,\(U U^\top = I_{m \times m}\)\(U^\top U = I_{p \times p}\)都是单位矩阵

  • (b) 对于\(X\)的简化SVD,\(U^\top U\)不是单位矩阵。

这个区别很重要,因为我们后面会使用简化SVD而不是完整SVD。这意味着我们需要处理\(U^\top U\)不是单位矩阵的情况。

但现在,让我们假设我们使用的是完整SVD,这样条件(a)和(b)都得到满足。

对方程(6.14)中定义的\(m \times m\)矩阵\(\tilde A = U^\top \hat A U\)进行特征分解:

(6.15)#\[ \tilde A = W \Lambda W^{-1} \]

其中\(\Lambda\)是特征值的对角矩阵,\(W\)是一个\(m \times m\)的矩阵,其每一列都对应于\(\Lambda\)中行(特征值)的特征向量。

\(U U^\top = I_{m \times m}\)时(这在\(X\)的完全SVD中是成立的),可得:

(6.16)#\[ \hat A = U \tilde A U^\top = U W \Lambda W^{-1} U^\top \]

根据方程(6.16),对角矩阵\(\Lambda\)包含\(\hat A\)的特征值,而\(\hat A\)对应的特征向量是矩阵\(UW\)的列。

因此,我们的一阶向量自回归所捕获的\(X_t\)动态的系统部分(即非随机部分)可以描述为:

\[ X_{t+1} = U W \Lambda W^{-1} U^\top X_t \]

将上述方程两边同时乘以\(W^{-1} U^\top \),得到:

\( W^{-1} U^\top X_{t+1} = \Lambda W^{-1} U^\top X_t \)$

\[ \hat b_{t+1} = \Lambda \hat b_t \]

其中,我们的编码器

\[ \hat b_t = W^{-1} U^\top X_t \]

我们的解码器

\[ X_t = U W \hat b_t \]

我们可以使用这种表示来构建一个基于\(X_1\)\(X_{t+1}\)的预测器\(\overline X_{t+1}\)

(6.17)#\[ \overline X_{t+1} = U W \Lambda^t W^{-1} U^\top X_1 \]

实际上, [Schmid, 2010]定义了一个\(m \times m\)的矩阵\(\Phi_s\)

(6.18)#\[ \Phi_s = UW \]

和一个广义逆矩阵

(6.19)#\[ \Phi_s^+ = W^{-1}U^\top \]

[Schmid, 2010]随后将方程(6.17)表示为

(6.20)#\[ \overline X_{t+1} = \Phi_s \Lambda^t \Phi_s^+ X_1 \]

基向量的分量\( \hat b_t = W^{-1} U^\top X_t \equiv \Phi_s^+ X_t\)是 DMD投影模态

要理解为什么它们被称为投影模态,注意到

\[ \Phi_s^+ = ( \Phi_s^\top \Phi_s)^{-1} \Phi_s^\top \]

所以 \(m \times p\) 的矩阵

\[ \hat b = \Phi_s^+ X \]

\(m \times n\) 矩阵 \(X\)\(m \times p\) 矩阵 \(\Phi_s\) 上的回归系数矩阵。

我们将在讨论由 Tu 等人 [Tu et al., 2014] 提出的表示法3时进一步讨论。

当我们想要使用简化SVD时(这在实践中经常出现),使用表示法3更为合适。

6.5. 表示法3#

与构建表示法1和表示法2的程序不同(它们都使用了完整SVD),我们现在使用简化SVD。

同样,令 \(p \leq \textrm{min}(m,n)\)\(X\) 的秩。

构造一个简化SVD

\[ X = \tilde U \tilde \Sigma \tilde V^\top , \]

其中现在 \(\tilde U\)\(m \times p\) 的矩阵,\(\tilde \Sigma\)\(p \times p\) 的矩阵,而 \(\tilde V^\top\)\(p \times n\) 的矩阵。

我们的 \(A\) 的最小范数最小二乘近似器现在的表示为

(6.21)#\[\hat A = X' \tilde V \tilde \Sigma^{-1} \tilde U^\top \]

计算\(\hat A\)的主要特征向量

我们首先参照构建表示法1时使用的步骤,通过以下方式为旋转的\(p \times 1\)状态\(\tilde b_t\)定义一个转移矩阵:

(6.22)#\[ \tilde A =\tilde U^\top \hat A \tilde U \]

作为投影系数的解释

[Brunton and Kutz, 2022]指出\(\tilde A\)可以被理解为\(\hat A\)\(\tilde U\)\(p\)个模态上的投影。

要验证这一点,首先注意到,由于\( \tilde U^\top \tilde U = I\),因此:

(6.23)#\[ \tilde A = \tilde U^\top \hat A \tilde U = \tilde U^\top X' \tilde V \tilde \Sigma^{-1} \tilde U^\top \tilde U = \tilde U^\top X' \tilde V \tilde \Sigma^{-1} \tilde U^\top \]

接下来,我们将使用标准最小二乘公式计算\(\hat A\)\(\tilde U\)上的投影的回归系数

\[ (\tilde U^\top \tilde U)^{-1} \tilde U^\top \hat A = (\tilde U^\top \tilde U)^{-1} \tilde U^\top X' \tilde V \tilde \Sigma^{-1} \tilde U^\top = \tilde U^\top X' \tilde V \tilde \Sigma^{-1} \tilde U^\top = \tilde A . \]

至此,我们验证了\(\tilde A\)\(\hat A\)\(\tilde U\)上的最小二乘投影。

一个逆运算的挑战

因为我们使用的是简化SVD,所以\(\tilde U \tilde U^\top \neq I\)

因此,

\[ \hat A \neq \tilde U \tilde A \tilde U^\top , \]

所以我们不能简单地用\(\tilde A\)\(\tilde U\)计算\(\hat A\)

死胡同

我们可以先抱着最好的希望,继续构造\(p \times p\)矩阵\(\tilde A\)的特征分解:

(6.24)#\[ \tilde A = \tilde W \Lambda \tilde W^{-1} \]

其中\(\Lambda\)是包含\(p\)个特征值的对角矩阵,\(\tilde W\)的列是对应的特征向量。

仿照表示法2中的步骤,我们可以轻松计算出一个\(m \times p\)的矩阵

(6.25)#\[ \tilde \Phi_s = \tilde U \tilde W \]

该矩阵对应到完整SVD中的(6.18)

此时,当\(\hat A\)由公式(6.21)给出时,计算\(\hat A \tilde \Phi_s\)很有意思:

\[\begin{split} \begin{aligned} \hat A \tilde \Phi_s & = (X' \tilde V \tilde \Sigma^{-1} \tilde U^\top ) (\tilde U \tilde W) \\ & = X' \tilde V \tilde \Sigma^{-1} \tilde W \\ & \neq (\tilde U \tilde W) \Lambda \\ & = \tilde \Phi_s \Lambda \end{aligned} \end{split}\]

\(\hat A \tilde \Phi_s \neq \tilde \Phi_s \Lambda\)意味着,与表示法2中的相应情况不同,\(\tilde \Phi_s = \tilde U \tilde W\)的列不是\(\hat A\)对应于矩阵\(\Lambda\)对角线上特征值的特征向量。

一种可行的方法

我们继续寻找能够通过简化SVD计算的\(\hat A\)的特征向量,这里不妨定义一个\(m \times p\)的矩阵\(\Phi\)

(6.26)#\[ \Phi \equiv \hat A \tilde \Phi_s = X' \tilde V \tilde \Sigma^{-1} \tilde W \]

不难发现,\(\Phi\)的列确实是\(\hat A\)的特征向量。

这是Tu等人[Tu et al., 2014]证明的一个结果,我们下面来介绍。

命题 \(\Phi\)\(p\)列是\(\hat A\)的特征向量。

证明: 根据公式(6.26),我们有

\[ \begin{aligned} \hat A \Phi & = (X' \tilde V \tilde \Sigma^{-1} \tilde U^\top ) (X' \tilde V \Sigma^{-1} \tilde W) \cr & = X' \tilde V \tilde \Sigma^{-1} \tilde A \tilde W \cr & = X' \tilde V \tilde \Sigma^{-1}\tilde W \Lambda \cr & = \Phi \Lambda \end{aligned} \]

因此

(6.27)#\[ \hat A \Phi = \Phi \Lambda \]

\(\phi_i\)\(\Phi\) 的第 \(i\) 列,\(\lambda_i\) 为分解式 (6.24)\(\tilde A\) 对应的第 \(i\) 个特征值。

将等式 (6.27) 两边的 \(m \times 1\) 向量对应项相等得到:

\[ \hat A \phi_i = \lambda_i \phi_i . \]

这个等式证实了 \(\phi_i\)\(\hat A\) 的特征向量,对应于 \(\tilde A\)\(\hat A\) 的特征值 \(\lambda_i\)

证明至此完成。

另见 [Brunton and Kutz, 2022] (第238页)。

6.5.1. \(\check b\) 的解码器作为线性投影#

根据特征分解 (6.27) ,我们可以将 \(\hat A\) 表示为:

(6.28)#\[ \hat A = \Phi \Lambda \Phi^+ . \]

从公式 (6.28) 我们可以推导出 \(p \times 1\) 向量 \(\check b_t\) 的动态:

\[ \check b_{t+1} = \Lambda \check b_t \]

其中

(6.29)#\[ \check b_t = \Phi^+ X_t \]

由于 \(m \times p\) 矩阵 \(\Phi\)\(p\) 个线性独立的列,\(\Phi\) 的广义逆矩阵为

\[ \Phi^{+} = (\Phi^\top \Phi)^{-1} \Phi^\top \]

因此

(6.30)#\[ \check b = (\Phi^\top \Phi)^{-1} \Phi^\top X \]

\(p \times n\) 矩阵 \(\check b\) 可以被视为是 \(m \times n\) 的矩阵 \(X\)\(m \times p\) 的矩阵 \(\Phi\) 上的最小二乘回归系数矩阵,因此

(6.31)#\[ \check X = \Phi \check b \]

\(X\)\(\Phi\) 上的最小二乘投影的 \(m \times n\) 矩阵。

\(X\) 的方差分解

根据这个 QuantEcon 讲座 https://python-advanced.quantecon.org/orth_proj.html 中讨论的最小二乘的投影理论,我们可以将 \(X\) 表示为 \(X\)\(\Phi\) 上的投影 \(\check X\) 和误差矩阵的和。

要验证这一点,注意到最小二乘投影 \(\check X\)\(X\) 的关系是

\[ X = \check X + \epsilon \]

(6.32)#\[ X = \Phi \check b + \epsilon\]

其中 \(\epsilon\) 是一个 \(m \times n\) 的最小二乘误差矩阵,满足最小二乘正交条件 \(\epsilon^\top \Phi =0\)

(6.33)#\[ (X - \Phi \check b)^\top \Phi = 0_{m \times p} \]

重新整理正交条件 (6.33) 得到 \(X^\top \Phi = \check b \Phi^\top \Phi\),这就推导出公式 (6.30)

6.5.2. 一种近似方法#

我们现在描述一种不使用公式 (6.29)的近似计算 \(p \times 1\) 的向量 \(\check b_t\) 的方法。

具体来说,以下论述改编自 [Brunton and Kutz, 2022](第240页)提供的一种高效计算方法,从而近似 \(\check b_t\)

为方便起见,我们将在时间 \(t=1\) 应用该方法。

对于 \(t=1\),根据方程 (6.32),我们有

(6.34)#\[ \check X_1 = \Phi \check b_1 \]

其中 \(\check b_1\) 是一个 \(p \times 1\) 的向量。

回顾上面表示1中的 \(X_1 = U \tilde b_1\),其中 \(\tilde b_1\) 是表示1的时间1基向量,而 \(U\) 来自完整SVD分解 \(X = U \Sigma V^\top\)

从方程 (6.32) 可以得出:

\[ U \tilde b_1 = X' \tilde V \tilde \Sigma^{-1} \tilde W \check b_1 + \epsilon_1 \]

其中 \(\epsilon_1\) 是方程 (6.32) 中的最小二乘误差向量。

因此可得:

\[ \tilde b_1 = U^\top X' V \tilde \Sigma^{-1} \tilde W \check b_1 + U^\top \epsilon_1 \]

将误差项 \(U^\top \epsilon_1\) 替换为零,并将完整SVD中的 \(U\) 替换为简化SVD中的 \(\tilde U\),我们得到 \(\tilde b_1\) 的近似值 \(\hat b_1\):

\[ \hat b_1 = \tilde U^\top X' \tilde V \tilde \Sigma^{-1} \tilde W \check b_1 \]

回顾方程 (6.23) 中的 \( \tilde A = \tilde U^\top X' \tilde V \tilde \Sigma^{-1}\)

因此可得:

\[\hat b_1 = \tilde A \tilde W \check b_1 \]

因此,根据 \(\tilde A\) 的特征分解 (6.24),我们有

\[ \hat b_1 = \tilde W \Lambda \check b_1 \]

因此,

\[ \hat b_1 = ( \tilde W \Lambda)^{-1} \tilde b_1 \]

或者

(6.35)#\[ \hat b_1 = ( \tilde W \Lambda)^{-1} \tilde U^\top X_1 , \]

这是对以下方程 (6.29) 中初始向量 \(\check b_1\) 的计算效率较高的近似:

(6.36)#\[ \check b_1= \Phi^{+} X_1 \]

(为了强调 (6.35) 是一个近似值,DMD的使用者有时将基向量 \(\check b_t = \Phi^+ X_t \) 的分量称为精确DMD模态,将 \(\hat b_t = ( \tilde W \Lambda)^{-1} \tilde U^\top X_t\) 的分量称为近似模态。)

在给定 \(X_t\) 的条件下,我们可以通过精确模态计算解码后的 \(\check X_{t+j}, j = 1, 2, \ldots \)

(6.37)#\[ \check X_{t+j} = \Phi \Lambda^j \Phi^{+} X_t\]

或者通过近似模态计算解码的 \(\hat X_{t+j}\):

(6.38)#\[ \hat X_{t+j} = \Phi \Lambda^j (\tilde W \Lambda)^{-1} \tilde U^\top X_t . \]

然后我们可以使用解码后的 \(\check X_{t+j}\)\(\hat X_{t+j}\) 来预测 \(X_{t+j}\)

6.5.3. 使用更少的模态#

在实际应用中,我们通常只使用少数几个模态,通常不多于三个。

前面的一些公式假设中,我们保留了与 \(X\) 的奇异值相关的所有 \(p\) 个模态。

我们可以调整公式,描述只保留 \(r < p\) 个最大奇异值的情况。

在这种情况下,我们只需将 \(\tilde \Sigma\) 替换为相应的 \(r\times r\) 奇异值矩阵,将 \(\tilde U\) 替换为对应于 \(r\) 个最大奇异值的 \(m \times r\) 的矩阵,将 \(\tilde V\) 替换为对应于 \(r\) 个最大奇异值的 \(n \times r\) 的矩阵。

上述所有重要公式都有其对应的形式。

6.6. Python代码来源#

你可以在这里找到DMD的Python实现。