更改

添加4,455字节 、 2026年1月11日 (星期日)
第420行: 第420行:  
在[[动力系统]]研究中,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]]。
 
在[[动力系统]]研究中,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]]。
   −
===理论===
+
'''残差DMD算法'''<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>K</math>,再基于此筛选出“靠谱”的Koopman候选特征对(<math>\lambda, g</math>)——筛选的核心依据就是前文定义的残差<math>\text{res}(\lambda, g)</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>\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>
 +
 
 +
根据前文对Koopman算子的定义,我们可以得知:
 +
 
 +
:<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>
 +
 
 +
式中,<math>V_{N} = \text{span}\{\psi_1, \dots, \psi_{N}\}</math>是子空间,<math>\{\psi_1, \dots, \psi_{N}\} \subset \mathcal{G}(\mathcal{X}) </math>是一组观测函数字典,<math>\mathcal{K}</math>的定义域。我们的目标是在该子空间上近似Koopman算子<math>\mathcal{K}</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>为系数[[向量]]。所以,我们可以把Koopman算子<math>\mathcal{K}</math>对任意观测函数<math>g</math>的作用拆分成两部分:一部分精确对应着Koopman算子原始的定义,另一部分是在子空间<math>V_{N}</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>
 +
 
 +
如果残差项为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{ \{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 \xi \in V_{N}</math>是基于字典的候选[[特征函数]]。为了衡量这个候选特征对的“不靠谱程度”(也就是它偏离真实特征对的程度),我们定义特征值残差:
 +
 
 +
:<math>\text{res}(\lambda, g)^2 = \frac{\sum_{j,k=1}^{N} \overline{\xi_j} \xi_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{\xi_j} \xi_k (\Psi_X^* W \Psi_X)_{jk}}.</math>
 +
 
 +
其中<math>\overline{\lambda}, \overline{\xi}</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_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>的作用。
   第427行: 第471行:  
:<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>
 
:<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>,即为:
+
'''定义(残差项):'''基于这个近似,我们可以把Koopman算子<math>\mathcal{K}</math>对任意观测函数<math>g</math>的作用拆分成两部分:一部分精确对应着Koopman算子原始的定义,另一部分是在子空间<math>V_{N}</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>[\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>
第452行: 第496行:  
<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{ \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>\displaystyle{ \mathcal{K} }</math>的候选特征对为 <math>(\lambda, g) </math>,<math>\lambda \in \mathbb{C} </math>是候选[[特征值]],<math>g = \Psi \xi \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算法<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>K</math>,再基于此筛选出“靠谱”的Koopman候选特征对(<math>\lambda, g</math>)——筛选的核心依据就是前文定义的残差<math>\text{res}(\lambda, g)</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>\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>\text{res}(\lambda, g)^2 = \frac{\sum_{j,k=1}^{N} \overline{\xi_j} \xi_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{\xi_j} \xi_k (\Psi_X^* W \Psi_X)_{jk}}.</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>
+
其中<math>\overline{\lambda}, \overline{\xi}</math>分别表示共轭的特征值和特征函数组合系数。
    
==核DMD==
 
==核DMD==
761

个编辑