更改

跳到导航 跳到搜索
添加18,616字节 、 2026年1月9日 (星期五)
无编辑摘要
第1行: 第1行: −
123
+
在[[动力系统]]研究中,Koopman[[算子]]理论通过全局[[线性化]]为分析[[非线性系统]]提供框架,但传统方法如EDMD面临[[谱污染]]、[[连续谱]]处理不足和高维挑战等局限。残差动态[[模式分解]](ResDMD<ref name=Colbrook_2023>Colbrook, M. J., Ayton, L. J. & Szőke, M. Residual dynamic mode decomposition: Robust and verified koopmanism. J. Fluid Mech. 955, A21 (2023).</ref><ref name=Colbrook_2024>Colbrook, M. J. & Townsend, A. Rigorous data‐driven computation of spectral properties of koopman operators for dynamical systems. Commun. Pure Appl. Math. 77, 221–283 (2024).</ref> 通过引入残差计算[[机制]],构建Koopman[[算子]]<math>\mathcal{K}</math>及其伴随[[算子]]与自身的乘积<math>\mathcal{K}^* \mathcal{K}</math>的[[Galerkin近似]],有效区分真实[[特征值]]与[[伪特征值]],解决了EDMD因有限维假设和离散化误差导致的谱失真问题,详情请查阅[[残差DMD]]。
 +
 
 +
==[[伪特征值]]的出现==
 +
 
 +
为什么会出现谱污染问题呢?原本特征值谱告诉我们的是,动力系统里有哪些增长、衰减或振荡的模式,但有时候会出现虚假的特征值。这些特征值对应着动力系统里并不真实存在的模式,是虚假的规律。为此,我们有了[[伪特征值]](Pseudo-eigenvalues)这样的概念。[[伪特征值]]指的是当使用有限维矩阵近似来表示无限维 Koopman 算子 <math>\mathcal{K}</math> 时,所计算出的[[特征值]] <math>\lambda</math> 有可能并不属于真实 Koopman 算子的谱 <math>\sigma(\mathcal{K})</math>。
 +
 
 +
'''定义(矩阵的[[伪特征值]]):'''在严格的数学框架下,[[伪特征值]]通常通过<math>\epsilon</math>-伪谱来定义。它描述了矩阵在受到扰动时,其[[特征值]]可能出现的区域。该区域包含了真实的特征值和虚假的特征值。对于一个有限维矩阵 <math>A</math> 和 <math>\epsilon > 0</math>,<math>A</math> 的<math>\epsilon</math>-伪谱定义为<ref name=Colbrook_2023 />: 
 +
 
 +
:<math> 
 +
\sigma_\epsilon(A) = \{ \lambda \in \mathbb{C} : \|(A - \lambda I)^{-1}\| \geq 1/\epsilon \} = \bigcup_{\|B\| \le \epsilon} \sigma(A + B) 
 +
</math> 
 +
 
 +
其中 <math>\sigma(A + B)</math> 表示矩阵 <math>A + B</math> 的[[特征值]]集合。这表明[[ <math>\epsilon</math>-伪谱]]是[[复平面]]上的一个区域,包含了所有可能由大小不超过 <math>\epsilon</math> 的扰动所产生的[[特征值]]。 
 +
 
 +
'''定义(算子的伪特征值):'''对于可能无界的 Koopman 算子 <math>\mathcal{K}</math>,其[[ <math>\epsilon</math>-伪谱]]的定义需要更加严谨,具体如下<ref name=Colbrook_2023 />: 
 +
 
 +
:<math> 
 +
\sigma_\epsilon(\mathcal{K}) := \text{cl} \left( \left\{ \lambda \in \mathbb{C} : \|(\mathcal{K} - \lambda)^{-1}\| > 1/\epsilon \right\} \right) = \text{cl} \left( \bigcup_{\|\mathcal{B}\| < \epsilon} \sigma(\mathcal{K} + \mathcal{B}) \right) 
 +
</math> 
 +
 
 +
其中 <math>\text{cl}</math> 表示[[集合]]的闭包。该定义刻画了对于任意给定的精度 <math>\epsilon</math>,能够以小于 <math>\epsilon</math> 的残差近似满足[[特征值]]方程的标量 <math>\lambda</math> 的[[集合]]。<math>\epsilon</math>反应的就是观测空间偏离不变子空间的程度。如果<math>\epsilon=0</math>,那么伪谱中所有的特征值一定都是真实的特征值。关于<math>\epsilon</math>的具体计算,下文关于残差DMD的原理的内容中有更进一步的介绍。
 +
 
 +
例如,设有一个平凡的对角线[[线性系统]],其[[特征值]]<math>\lambda \in \{1, 2, 5\}</math>,[[特征向量]]<math>\xi_j</math>为坐标方向<math>x_j</math>,以及一个对前两个[[特征向量]]进行混合的简单观测:
 +
 
 +
:<math> \frac{d}{dt} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 5 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} </math> <math> \quad \text{选择观测函数为} \quad y =  x_1 + x_2. </math>
 +
 
 +
该观测函数本身张成的空间并不是 Koopman 算子的不变子空间,所以产生了误差<math>\epsilon</math>,其大小反应的是该观测空间与Koopman不变子空间之间的距离。在这种情况下,数据驱动算法试图用单一的增长率来拟合混合了不同增长率的数据,从而预测出一个[[伪特征值]] <math>5</math>。这实际上是前两个[[特征值]]<math>\lambda=1</math>和<math>\lambda=2</math>的和,因为测量是前两个[[特征向量]]之和。该[[特征值]]属于上述[[伪谱]]定义的[[集合]]内,但不是系统真实的[[特征值]]。
 +
 
 +
因此,在实际应用中选取观测函数时,采取一些手段避免[[过拟合]]是非常重要的。除了观测函数选取不当,在数据驱动算法中,如果数据量没有足够多,或者数据[[采样]]相比于原本的[[连续动力学]]过于离散化,也会造成[[伪特征值]]出现的问题。
 +
 
 +
==理论==
 +
'''定义(观测函数字典):'''给定一组观测函数字典<math>\{\psi_1, \dots, \psi_{N}\} \subset \mathcal{G}(\mathcal{X}) </math>(如前文,<math>\mathcal{G}(\mathcal{X}) </math>为<math>\mathcal{K}</math>的定义域),比如<math>x^2, \cos(x), e^x...</math>,可以看作是构建Koopman不变子空间的一组基函数。子空间可以写作<math>V_{N} = \text{span}\{\psi_1, \dots, \psi_{N}\}</math>。我们的目标是在该子空间上近似Koopman算子<math>\mathcal{K}</math>的作用。
 +
 
 +
当我们讨论的是多维向量时,字典函数的映射可以写作<math>\Psi(\boldsymbol{x}) = [\psi_1(\boldsymbol{x}), \dots, \psi_{N}(\boldsymbol{x})] \in \mathbb{C}^{1 \times N}</math>,则子空间<math>V_{N}</math>中的任意观测函数<math>g</math>可表示为字典函数的线性组合,即<math>g(\boldsymbol{x}) = \sum_{j=1}^{N} \psi_j(\boldsymbol{x}) g_j = \Psi(\boldsymbol{x}) \boldsymbol{g}</math>,其中<math>\boldsymbol{g} \in \mathbb{C}^{N}</math>为系数[[向量]]。从字典函数与观测函数两个概念的关系中不难看出,字典函数本身也是特殊的一组观测函数,所以它也满足<ref name=Colbrook_2023 /><ref name=Colbrook_2024>Colbrook, M. J. & Townsend, A. Rigorous data‐driven computation of spectral properties of koopman operators for dynamical systems. Commun. Pure Appl. Math. 77, 221–283 (2024).</ref>:
 +
 
 +
:<math>[\mathcal{K}\psi_j](\boldsymbol{x}) = \psi_j(F(\boldsymbol{x})) \approx \sum_{i=1}^{N} K_{ij} \psi_i(\boldsymbol{x}), \quad 1 \leq j \leq N.</math>
 +
 
 +
'''定义(残差项):'''基于这个近似,我们可以把Koopman算子<math>\mathcal{K}</math>对任意观测函数<math>g</math>的作用拆分成两部分:一部分精确对应着Koopman算子原始的定义,另一部分是近似带来的误差项(残差)<math>r(g, \boldsymbol{x})</math>,即为:
 +
 
 +
:<math>[\mathcal{K}g](\boldsymbol{x}) = \Psi(F(\boldsymbol{x})) \boldsymbol{g} = \Psi(\boldsymbol{x}) (K \boldsymbol{g}) + \underbrace{\sum_{j=1}^{N} \psi_j(F(\boldsymbol{x})) g_j - \Psi(\boldsymbol{x}) (K \boldsymbol{g})}_{r(g, \boldsymbol{x})}.</math>
 +
 
 +
残差项衡量的是在子空间<math>V_{N}</math>上近似Koopman算子的误差大小。如果残差项为0,说明我们完美地用一个[[线性系统]]重构出了原本的[[非线性系统]]。通常情况下,<math>V_{N}</math>不是<math> \mathcal{K} </math>的不变子空间,因此不存在能使<math>\displaystyle{ r(g, \boldsymbol{x}) }</math>对所有<math>\displaystyle{ g \in V_{N} }</math>和<math>\boldsymbol{x} \in \mathcal{X}</math>均为零的<math>\displaystyle{ K }</math>。
 +
 
 +
'''优化目标:'''因此,我们的核心任务就变成了找到一个最优的矩阵<math>K</math>,让这个残差项的整体误差最小。为了在系统整个定义域上[[量化]]整体误差,我们要让残差项在定义域上求积分。对应的优化问题就是:
 +
 
 +
:<math>\displaystyle{ \arg\min_{K' \in \mathbb{C}^{N \times N}} \left\{ \int_{\mathcal{X}} \max_{\substack{g \in \mathbb{C}^{N}, \\ \|\boldsymbol{g}\|=1}} |r(g, \boldsymbol{x})|^2 d\omega(\boldsymbol{x}) = \int_{\mathcal{X}} \|\Psi(F(\boldsymbol{x})) - \Psi(\boldsymbol{x}) K'\|_{\ell^2}^2 d\omega(\boldsymbol{x}) \right\} }</math>
 +
 
 +
等式中,<math>d\omega(\boldsymbol{x})</math>表示关于测度<math>\omega</math>的积分,一般情况下,是标准的[[Lebesgue测度]]<math>d(\boldsymbol{x})</math>。左边的最大化残差项意味着寻找同一组字典函数下最差的观测方向。我们希望最终得到的<math>K</math>即使在最差的观测函数系数下也依然有最小的残差。为了方便比较,我们需要保持<math>\|\boldsymbol{g}\|=1</math>,即所有的系数向量都是单位向量,这样的话我们关注的就只是系数向量的方向。根据[[柯西-施瓦茨不等式(Cauchy-Schwarz inequality)]]和范数的定义,一个向量的[[欧几里得范数(2-范数)]]就是它在所有单位向量方向上[[投影]]的最大值。所以原本求解残差项最大的计算就转化为了上式中等号右边的积分项,其中<math>\|\mathbf{ · }\|_{\ell^2}</math>表示向量的标准欧几里得范数。
 +
 
 +
不过实际计算中无法直接计算积分([[状态空间]]连续,无法遍历所有状态),因此我们需要用加权求和的方式近似积分:以<math>\displaystyle{ \{x_j\}_{j=1}^M }</math>为[[节点]],<math>\boldsymbol{y}^{(j)} = F(\boldsymbol{x}^{(j)}) </math>,<math>\displaystyle{ \{w_j\}_{j=1}^M }</math>为权重,<math>M </math>为[[初始条件]]数量。通过这种方式,把连续的积分转化为离散的加权和,原来的优化问题就变成了更容易计算的'''[[加权最小二乘问题]]''':
 +
 
 +
:<math>\arg\min_{K'\in\mathbb{C}^{N \times N}} \sum_{j=1}^{M} w_j \|\Psi(y^{(j)}) - \Psi(x^{(j)})K'\|_{\ell_2}^2</math>
 +
 
 +
 
 +
'''优化结果:'''该问题有[[解析解]],这个解就是我们要找的最优近似矩阵<math>K</math>,可表示为:
 +
 
 +
:<math>\displaystyle{ K = (\Psi_X^* W \Psi_X)^\dagger (\Psi_X^* W \Psi_Y) }</math>
 +
 
 +
其中 “<math>\displaystyle{ \dagger }</math>” 表示[[伪逆]],<math>\displaystyle{ W = \text{diag}(w_1, \dots, w_M) }</math>(对角权重矩阵),<math>\displaystyle{ \Psi_X }</math>和<math>\displaystyle{ \Psi_Y }</math>是把所有节点的特征映射向量堆叠起来形成的矩阵——简单说就是“每个行对应一个节点,每个列对应一个观测函数”,具体形式为:
 +
 
 +
<math>\displaystyle{ \Psi_X = \begin{pmatrix} \Psi(\boldsymbol{x}^{(1)}) \\ \vdots \\ \Psi(\boldsymbol{x}^{(M)}) \end{pmatrix}, \quad \Psi_Y = \begin{pmatrix} \Psi(\boldsymbol{y}^{(1)}) \\ \vdots \\ \Psi(\boldsymbol{y}^{(M)}) \end{pmatrix} }</math>
 +
 
 +
'''定义(特征值残差):'''给定<math>\displaystyle{ \mathcal{K} }</math>的候选特征对为 <math>(\lambda, g) </math>,<math>\lambda \in \mathbb{C} </math>是候选[[特征值]],<math>g = \Psi \boldsymbol{g} \in V_{N}</math>是基于字典的候选[[特征函数]]。为了衡量这个候选特征对的“不靠谱程度”(也就是它偏离真实特征对的程度),我们定义特征值残差:
 +
 
 +
:<math>\text{res}(\lambda, g)^2 = \frac{\sum_{j,k=1}^{N} \overline{g_j} g_k \left[ (\Psi_Y^* W \Psi_Y)_{jk} - \lambda (\Psi_Y^* W \Psi_X)_{jk} - \overline{\lambda} (\Psi_X^* W \Psi_Y)_{jk} + |\lambda|^2 (\Psi_X^* W \Psi_X)_{jk} \right]}{\sum_{j,k=1}^{N} \overline{g_j} g_k (\Psi_X^* W \Psi_X)_{jk}}.</math>
 +
 
 +
其中<math>\overline{\lambda}, \overline{g}</math>分别表示共轭的特征值和特征函数组合系数。
 +
 
 +
==算法==
 +
残差DMD算法的核心思路是:通过数据驱动的方式求解近似Koopman矩阵<math>K</math>,再基于此筛选出“靠谱”的Koopman候选特征对(<math>\lambda, g</math>)——筛选的核心依据就是前文定义的残差<math>\text{res}(\lambda, g)</math>,残差越小说明候选特征对越接近真实情况。
 +
 
 +
一、计算无[[谱污染]][[特征值]]的算法<ref name=Colbrook_2024>Colbrook, M. J. & Townsend, A. Rigorous data‐driven computation of spectral properties of koopman operators for dynamical systems. Commun. Pure Appl. Math. 77, 221–283 (2024).</ref>:近似得到的矩阵容易出现伪特征值,故此算法是用来判断矩阵的特征值是不是为特征值,解决传统EDMD的[[谱污染]]问题。
 +
 
 +
'''输入:'''系统变量的初始状态<math>\{x^{(j)}\}_{j=1}^M</math>、系统变量的下一时刻状态<math>\{y^{(j)}=F(x^{(j)})\}_{j=1}^M</math>、每个点对应的权重<math>\{w_j\}_{j=1}^M</math>、观测函数<math>\{\psi_j\}_{j=1}^{N}</math>、判定是否是真特征值的阈值<math>\epsilon>0</math>
 +
 
 +
# 计算三个核心矩阵:<math>\Psi_X^* W \Psi_X</math>、<math>\Psi_X^* W \Psi_Y</math>、<math>\Psi_Y^* W \Psi_Y</math>(<math>\Psi_X/\Psi_Y</math>为字典在<math>x/y</math>上的取值矩阵,<math>W</math>为权重对角矩阵)。
 +
# 求解广义[[特征值]]<math>(\Psi_X^* W \Psi_Y)g = \lambda(\Psi_X^* W \Psi_X)g</math>,得到候选[[特征值]]和[[特征函数]]。
 +
# 计算每个候选[[特征值]]的残差<math>res(\lambda_j, g_j)</math>(衡量它们与真实Koopman[[算子]]的契合度)。
 +
# 丢弃残差大于<math>\epsilon</math>的[[伪特征值]],保留满足精度的有效[[特征值]]。
 +
 
 +
'''输出:'''残差小于阈值的准确特征值对<math>\{(\lambda_j, g_j) \mid res(\lambda_j, g_j) \leq \epsilon\}</math>
 +
 
 +
二、ResDMD计算ε-[[伪谱]]估计算法<ref name=Colbrook_2024>Colbrook, M. J. & Townsend, A. Rigorous data‐driven computation of spectral properties of koopman operators for dynamical systems. Commun. Pure Appl. Math. 77, 221–283 (2024).</ref>:扩展上个算法的功能,计算Koopman[[算子]]的<math>\epsilon</math>-[[伪谱]],弥补[[特征值]]无法反映的谱分布信息。
 +
 
 +
'''输入:'''系统变量的初始状态<math>\{x^{(j)}\}_{j=1}^M</math>、系统变量的下一时刻状态<math>\{y^{(j)}=F(x^{(j)})\}_{j=1}^M</math>、每个点对应的权重<math>\{w_j\}_{j=1}^M</math>、观测函数<math>\{\psi_j\}_{j=1}^{N}</math>、判定是否是真特征值的阈值<math>\epsilon>0</math>、谱区域网格点<math>\{z_1,...,z_k\} \subset \mathbb{C}</math>
 +
 
 +
# 计算三个核心矩阵:<math>\Psi_X^* W \Psi_X</math>、<math>\Psi_X^* W \Psi_Y</math>、<math>\Psi_Y^* W \Psi_Y</math>(<math>\Psi_X/\Psi_Y</math>为字典在<math>x/y</math>上的取值矩阵,<math>W</math>为权重对角矩阵)。
 +
# 对每个网格点<math>z_j</math>,求解最小残差<math>\tau_j = \min_{g \in \mathbb{C}^{N}} res(z_j, \Psi g)</math>(转化为广义[[SVD]]问题)。
 +
# 筛选出最小残差<math>\tau_j < \epsilon</math>的网格点,构成<math>\epsilon</math>-[[伪谱]]。
 +
 
 +
'''输出:'''<math>\epsilon</math>-[[伪谱]]估计,<math>\tau_j</math>为网格点<math>z_j</math>的最小残差<math>\{z_j \mid \tau_j < \epsilon\}</math>、对应[[伪谱]]区域的<math>\epsilon</math>-近似[[特征函数]]<math>\{g_j \mid \tau_j < \epsilon\}</math>
 +
 
 +
==例子==
 +
[[高斯迭代映射]]是一类具有复杂[[非线性动力学]]行为的实值[[动力系统]],因[[分岔]]图呈现[[类似]] “鼠标” 的特征而成为验证[[非线性]]算法的经典案例。该映射的[[非线性]]源于指数项<math>\exp(-\alpha x^2)</math>,当参数<math>\alpha</math>和<math>\beta</math>取特定值时,系统会表现出从周期运动到复杂[[分岔]]的过渡,其 Koopman [[算子]]的谱结构包含离散[[特征值]]与潜在的[[连续谱]]成分,对算法的谱分辨能力提出挑战。
 +
 
 +
实验<ref name=Colbrook_2024>Colbrook, M. J. & Townsend, A. Rigorous data‐driven computation of spectral properties of koopman operators for dynamical systems. Commun. Pure Appl. Math. 77, 221–283 (2024).</ref>采用的[[高斯迭代映射]]定义为:<math>F(x) = \exp(-\alpha x^2) + \beta</math>
 +
 
 +
式中,<math>\alpha=2</math>;<math>\beta=-1-\exp(-\alpha)</math>。映射的[[状态空间]]限制为<math>\Omega=[-1,0]</math>,采用标准[[勒贝格测度]]([[Lebesgue measure]])<math>\omega</math>描述状态分布。
 +
 
 +
观测字典用<math>[-1,0]</math>区间的[[勒让德多项式]],具体形式为:<math>\psi_j(x) = c_j P_j(2x+1)</math>
 +
 
 +
其中:<math>P_j</math>为j次[[勒让德多项式]];<math>c_j</math>为[[归一化]]系数,使字典在<math>L^2(\Omega, \omega)</math>空间内满足<math>\langle \psi_i, \psi_j \rangle = \delta_{ij}</math><math>(\delta_{ij}</math>为[[克罗内克函数]]),减少基函数间的冗余干扰。实验中固定字典规模<math>N_K=40</math>。
 +
 
 +
实验数据为<math>\{(x^{(j)}, y^{(j)})\}_{j=1}^M</math>,其中<math>(y^{(j)}=F(x^{(j)})</math>(F为[[高斯迭代映射]])。
 +
 
 +
下图展示了[[高斯迭代映射]][[伪谱]]图与随着数据点𝑀数量增加,不同求积法则下Galerkin矩阵Ψ*<small>𝑋</small>𝑊Ψ<small>𝑌</small>的收敛情况。下图中左图验证 ResDMD 的[[谱污染]]剔除能力,以[[复平面]](横轴<math>Re(\lambda)</math>、纵轴<math>Im(\lambda)</math>)为背景,黑色曲线是[[伪谱]]轮廓,分别对应<math>\epsilon=0.001,0.01,0.1,0.3</math>的<math>\epsilon</math>- [[伪谱]],定义为:<math>\sigma_\epsilon(K) = cl\left(\{\lambda \in \mathbb{C} \mid \|(K - \lambda)^{-1}\| > 1/\epsilon\}\right)</math>。其中<math>cl(\cdot)</math>表示[[集合]]的闭包。
 +
 
 +
品红色圆点为传统 EDMD [[特征值]],大量[[特征值]]位于[[伪谱]]之外,这些是离散化导致的[[谱污染]](虚假[[特征值]]),无法反映系统真实[[动力学]],例如虚部 > 0.5的[[特征值]]对应不存在的高频[[振荡]],与[[高斯迭代映射]]的实际[[动力学]]矛盾。蓝色叉号为ResDMD 筛选[[特征值]],所有[[特征值]]均位于<math>\epsilon=0.01</math>的[[伪谱]]内。下图右图体现不同积分规则的性能差异,以 “数据点数量M” 为横轴、“核心矩阵元素最大绝对误差” 为纵轴(对数坐标),误差定义为:
 +
 
 +
:<math>err = \max_{1 \leq j,k \leq N} \left| (\Psi_X^* W \Psi_Y)_{jk} - \langle K\psi_k, \psi_j \rangle \right|</math>,
 +
 
 +
其中<math>\langle K\psi_k, \psi_j \rangle</math>为 Koopman [[算子]][[内积]]的真实值(作为误差基准)。结果显示不同积分规则的收敛速率差异显著:高斯-勒让德规则指数收敛;梯形规则<math>O(M^{-2})</math>;黎曼和规则<math>O(M^{-1})</math>;[[蒙特卡洛]]规则<math>O(M^{-1/2})</math>。
 +
 
 +
[[文件:ResDMDGussian.png|无|高斯迭代映射结果图<ref name=Colbrook_2024 />|缩略图|600x600像素]]<br>
761

个编辑

导航菜单