| 第244行: |
第244行: |
| | | | |
| | 动力学模式分解是对Koopman模式分解的一种近似。这意味着,DMD的特征值将近似Koopman算子的特征值,DMD中的模式将近似Koopman算子的模式,DMD中的振幅将近似Koopman算子特征函数在初始条件下的取值。 | | 动力学模式分解是对Koopman模式分解的一种近似。这意味着,DMD的特征值将近似Koopman算子的特征值,DMD中的模式将近似Koopman算子的模式,DMD中的振幅将近似Koopman算子特征函数在初始条件下的取值。 |
| | + | |
| | + | \documentclass[12pt]{article} |
| | + | \usepackage[utf8]{inputenc} |
| | + | \usepackage[T1]{fontenc} |
| | + | \usepackage{amsmath, amssymb, amsthm} |
| | + | \usepackage{graphicx} |
| | + | \usepackage{xcolor} |
| | + | \usepackage{enumitem} |
| | + | \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} |
| | + | \setlength{\parindent}{0pt} |
| | + | \setlength{\parskip}{1em} |
| | + | \newcommand{\vecx}{\mathbf{x}} |
| | + | \newcommand{\matA}{\mathbf{A}} |
| | + | \newcommand{\matAt}{\tilde{\mathbf{A}}} |
| | + | \newcommand{\matU}{\mathbf{U}} |
| | + | \newcommand{\matV}{\mathbf{V}} |
| | + | \newcommand{\matS}{\mathbf{\Sigma}} |
| | + | \newcommand{\matPhi}{\mathbf{\Phi}} |
| | + | \newcommand{\matW}{\mathbf{W}} |
| | + | \newcommand{\matL}{\mathbf{\Lambda}} |
| | + | \newcommand{\matX}{\mathbf{X}} |
| | + | \newcommand{\matXp}{\mathbf{X'}} |
| | + | \newcommand{\hermitian}{^*} |
| | + | |
| | + | \title{动态模分解 (DMD) 算法详解 \\ {\large 基于 Koopman 理论}} |
| | + | \author{小白指南} |
| | + | \date{} |
| | + | |
| | + | \begin{document} |
| | + | |
| | + | \maketitle |
| | + | |
| | + | \section{核心思想:Koopman 算子} |
| | + | |
| | + | Koopman 算子提供了一个分析非线性动力学的革命性视角: |
| | + | |
| | + | \begin{itemize} |
| | + | \item \textbf{传统视角:} 直接观察系统状态 $\vecx(t)$ 的演化,其动力学通常是非线性的:$\vecx_{k+1} = f(\vecx_k)$。 |
| | + | \item \textbf{Koopman 视角:} 不直接看状态本身,而是去观察系统的\textbf{观测函数} $g(\vecx)$。在这个由观测函数张成的无限维空间上,系统的演化是\textbf{线性的},由一个线性算子 $\mathcal{K}$(即 Koopman 算子)描述: |
| | + | \[ |
| | + | \mathcal{K} g(\vecx_k) = g(f(\vecx_k)) = g(\vecx_{k+1}) |
| | + | \] |
| | + | \end{itemize} |
| | + | |
| | + | 动态模分解 (DMD) 是 Koopman 算子的一种数据驱动的、有限维近似方法。 |
| | + | |
| | + | \section{DMD 算法详细步骤} |
| | + | |
| | + | 假设我们有一系列按时间排列的数据快照 $\{\vecx_1, \vecx_2, \dots, \vecx_{m+1}\}$,其中 $\vecx_k \in \mathbb{R}^n$。目标是找到一个矩阵 $\matA$ 使得 $\vecx_{k+1} \approx \matA \vecx_k$。 |
| | + | |
| | + | \subsection{步骤 1:组建数据矩阵} |
| | + | 构建两个数据矩阵: |
| | + | \[ |
| | + | \matX = [\vecx_1\ \vecx_2\ \cdots\ \vecx_m], \quad \matXp = [\vecx_2\ \vecx_3\ \cdots\ \vecx_{m+1}] |
| | + | \] |
| | + | 目标关系为: |
| | + | \[ |
| | + | \matXp \approx \matA \matX |
| | + | \] |
| | + | |
| | + | \subsection{步骤 2:奇异值分解 (SVD)} |
| | + | 对矩阵 $\matX$ 进行截断的 SVD(取秩 $r$): |
| | + | \[ |
| | + | \matX \approx \matU_r \matS_r \matV_r\hermitian |
| | + | \] |
| | + | 其中 $\matU_r \in \mathbb{R}^{n \times r}$, $\matS_r \in \mathbb{R}^{r \times r}$, $\matV_r \in \mathbb{R}^{m \times r}$,且 $\matU_r\hermitian \matU_r = \matV_r\hermitian \matV_r = \mathbf{I}_r$。 |
| | + | |
| | + | \subsection{步骤 3:在降维空间计算 $\matAt$} |
| | + | 将高维算子 $\matA$ 投影到 SVD 得到的低维空间上,得到简化算子 $\matAt$: |
| | + | \[ |
| | + | \matAt = \matU_r\hermitian \matA \matU_r = \matU_r\hermitian \matXp \matV_r \matS_r^{-1} |
| | + | \] |
| | + | $\matAt \in \mathbb{R}^{r \times r}$ 是 $\matA$ 的低秩近似。 |
| | + | |
| | + | \subsection{步骤 4:特征分解} |
| | + | 求解简化系统 $\matAt$ 的特征值和特征向量: |
| | + | \[ |
| | + | \matAt \matW = \matW \matL |
| | + | \] |
| | + | 其中 $\matL$ 是对角矩阵,其对角线元素为特征值 $\lambda_i$,$\matW$ 的列是对应的特征向量。 |
| | + | |
| | + | \subsection{步骤 5:重建 DMD 模式} |
| | + | 将降维空间的特征向量 $\matW$ 映射回原始状态空间,得到 DMD 模式 $\matPhi$: |
| | + | \[ |
| | + | \matPhi = \matXp \matV_r \matS_r^{-1} \matW |
| | + | \] |
| | + | $\matPhi$ 的每一列是一个 DMD 模式,代表了数据中一种特定的空间结构。 |
| | + | |
| | + | \subsection{步骤 6:预测与重构} |
| | + | 任何时刻的状态可由 DMD 模式的线性组合来重构: |
| | + | \[ |
| | + | \vecx_k \approx \matPhi \matL^{k-1} \vecb |
| | + | \] |
| | + | 其中振幅向量 $\vecb$ 由初始条件确定:$\vecb = \matPhi^{\dagger} \vecx_1$($^{\dagger}$ 表示 Moore-Penrose 伪逆)。 |
| | + | |
| | + | \section{简单示例:叠加正弦波} |
| | + | |
| | + | 考虑一个一维信号,由两个衰减正弦波叠加而成: |
| | + | \[ |
| | + | x(t) = 2 e^{-0.1 t} \sin(2\pi \cdot 1 \cdot t) + 0.5 e^{-0.5 t} \sin(2\pi \cdot 5 \cdot t) |
| | + | \] |
| | + | |
| | + | \subsection{应用 DMD} |
| | + | \begin{enumerate} |
| | + | \item \textbf{采样:} 以 100 Hz 频率采样,得到数据快照 $\vecx_k = x(t_k)$。 |
| | + | \item \textbf{构建 $\matX, \matXp$}。 |
| | + | \item \textbf{SVD:} 由于主导动态只有两个,取 $r=2$。SVD 将识别出两个主要模式。 |
| | + | \item \textbf{计算 $\matAt$ 和特征值:} 会得到两个特征值 $\lambda_1, \lambda_2$。从其幅角和幅值可解码动态: |
| | + | \begin{align*} |
| | + | \omega_1 &= \frac{\text{angle}(\lambda_1)}{2\pi \Delta t} \approx 1 \text{ Hz} \\ |
| | + | \omega_2 &= \frac{\text{angle}(\lambda_2)}{2\pi \Delta t} \approx 5 \text{ Hz} \\ |
| | + | \text{衰减率}_1 &= \frac{\log(|\lambda_1|)}{\Delta t} \approx -0.1 \\ |
| | + | \text{衰减率}_2 &= \frac{\log(|\lambda_2|)}{\Delta t} \approx -0.5 |
| | + | \end{align*} |
| | + | \item \textbf{DMD 模式:} $\matPhi$ 中的两列将分别近似于纯净的 $1$ Hz 和 $5$ Hz 衰减正弦波。 |
| | + | \item \textbf{振幅:} 初始振幅 $\vecb$ 的计算结果将接近 $[2, 0.5]^T$。 |
| | + | \end{enumerate} |
| | + | |
| | + | DMD 成功地从混合信号中分离出了频率、衰减率和振幅这两个独立的动态模式。 |
| | + | |
| | + | \end{document} |
| | | | |
| | ==扩展DMD== | | ==扩展DMD== |