| 第419行: |
第419行: |
| | | | |
| | 扩展DMD允许我们用各种各样的非线性函数做观测函数,并且最终能估计出Koopman算子的特征值和特征函数,但这样估算出来的特征值谱容易面临[[谱污染]]的问题。所谓谱污染,便是指算出来的特征值有可能是虚假的特征值。原本特征值谱告诉我们的是,动力系统里有哪些增长、衰减或振荡的模式,而虚假的特征值对应着动力系统里并不真实存在的模式,是虚假的规律。为此,我们有了[[伪特征值]](Pseudo-eigenvalues)这样的概念。[[伪特征值]]指的是当使用有限维矩阵近似来表示无限维 Koopman 算子 <math>\mathcal{K}</math> 时,所计算出的[[特征值]] <math>\lambda</math> 有可能并不属于真实 Koopman 算子的谱 <math>\sigma(\mathcal{K})</math>。 | | 扩展DMD允许我们用各种各样的非线性函数做观测函数,并且最终能估计出Koopman算子的特征值和特征函数,但这样估算出来的特征值谱容易面临[[谱污染]]的问题。所谓谱污染,便是指算出来的特征值有可能是虚假的特征值。原本特征值谱告诉我们的是,动力系统里有哪些增长、衰减或振荡的模式,而虚假的特征值对应着动力系统里并不真实存在的模式,是虚假的规律。为此,我们有了[[伪特征值]](Pseudo-eigenvalues)这样的概念。[[伪特征值]]指的是当使用有限维矩阵近似来表示无限维 Koopman 算子 <math>\mathcal{K}</math> 时,所计算出的[[特征值]] <math>\lambda</math> 有可能并不属于真实 Koopman 算子的谱 <math>\sigma(\mathcal{K})</math>。 |
| | + | |
| | + | 残差动态[[模式分解]](ResDMD<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> 通过清晰地呈现特征值偏离真实系统的残差,有效区分真实[[特征值]]与虚假的特征值,解决了一般算法下因有限维假设和离散化误差导致的谱污染问题,详情请查阅[[残差DMD]]。 |
| | + | |
| | + | '''残差DMD算法'''<ref name=Colbrook_2024 />的核心思路是:通过数据驱动的方式求解近似Koopman矩阵<math>K</math>,再基于此筛选出“靠谱”的Koopman候选特征对:<math>\lambda, \varphi</math>。<math>\varphi</math>便是特征值<math>\lambda</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)\varphi = \lambda(\Psi_X^* W \Psi_X)\varphi</math>,得到候选[[特征值]]和[[特征函数]]。 |
| | + | # 计算每个候选[[特征值]]的残差<math>res(\lambda_j, \varphi_j)</math>。 |
| | + | # 丢弃残差大于<math>\epsilon</math>的[[伪特征值]],保留满足精度的有效[[特征值]]。 |
| | + | |
| | + | '''输出:'''残差小于阈值的<math>\epsilon</math>-伪谱<math>\{(\lambda_j, g_j) \mid res(\lambda_j, g_j) \leq \epsilon\}</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>为系数[[向量]]。从字典函数与观测函数两个概念的关系中不难看出,字典函数本身也是特殊的一组观测函数。 |
| | + | |
| | + | 已知观测函数字典和<math>\boldsymbol{y}^{(j)} = F(\boldsymbol{x}^{(j)}) </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>res(\lambda_j, \varphi_j)</math>,我们需要先定义伪特征值和伪谱。 |
| | | | |
| | '''定义(算子的伪特征值):'''计算伪特征值,其实就是在给定一个特征值时,我们可以算出在多大程度上该特征值会被视为是虚假的特征值。当人为给定阈值<math>\epsilon</math>时,满足差距在阈值以内的特征值可被认为是真实的特征值。而这样的特征值的集合便叫做<math>\epsilon</math>-伪谱。其定义如下<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>: | | '''定义(算子的伪特征值):'''计算伪特征值,其实就是在给定一个特征值时,我们可以算出在多大程度上该特征值会被视为是虚假的特征值。当人为给定阈值<math>\epsilon</math>时,满足差距在阈值以内的特征值可被认为是真实的特征值。而这样的特征值的集合便叫做<math>\epsilon</math>-伪谱。其定义如下<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>: |
| 第428行: |
第449行: |
| | 其中 <math>\text{cl}</math> 表示[[集合]]的闭包。该定义刻画了对于任意给定的精度 <math>\epsilon</math>,能够以小于 <math>\epsilon</math> 的残差近似满足[[特征值]]方程的标量 <math>\lambda</math> 的[[集合]]。<math>\epsilon</math>反应的就是观测空间偏离不变子空间的程度。如果<math>\epsilon=0</math>,那么伪谱中所有的特征值一定都是真实的特征值。 | | 其中 <math>\text{cl}</math> 表示[[集合]]的闭包。该定义刻画了对于任意给定的精度 <math>\epsilon</math>,能够以小于 <math>\epsilon</math> 的残差近似满足[[特征值]]方程的标量 <math>\lambda</math> 的[[集合]]。<math>\epsilon</math>反应的就是观测空间偏离不变子空间的程度。如果<math>\epsilon=0</math>,那么伪谱中所有的特征值一定都是真实的特征值。 |
| | | | |
| − | 残差动态[[模式分解]](ResDMD<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> 通过清晰地呈现特征值偏离真实系统的残差,有效区分真实[[特征值]]与虚假的特征值,解决了一般算法下因有限维假设和离散化误差导致的谱污染问题,详情请查阅[[残差DMD]]。
| |
| − |
| |
| − | '''残差DMD算法'''<ref name=Colbrook_2024 />的核心思路是:通过数据驱动的方式求解近似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算子的定义,我们可以得知: | | 根据前文对Koopman算子的定义,我们可以得知: |