技术标签: 时间序列 动态模态分解 动态模式分解 DMD 控制论
本文地址:https://goodgoodstudy.blog.csdn.net/article/details/111873026
动态模式分解(Dynamic Mode Decomposition,DMD)使用随时间增长、衰减和振荡的相干结构来求解或近似动力学系统。将相干结构称为DMD模式。换句话说,DMD将动力学系统转换为模式的叠加,每个模式的强度由特征值控制。
令人惊讶的是,尽管识别DMD模式和特征值的数学过程是纯线性的,但系统本身却可以是非线性的!
有一个合理的理论基础可以证明非线性系统可以用一组模式和特征值对来描述。在这里不多做讨论,感兴趣的话,可以阅读 Koopman 算子及其与DMD的联系123。
DMD不仅是分析系统内部运行情况的有用诊断工具,而且还可以用于预测系统的未来状态。所需要的只是模式和特征值。
考虑一组 n n n 个数据对 { ( x 0 , y 0 ) , ( x 1 , y 1 ) , … , ( x n , y n ) } \{(x_0, y_0), (x_1, y_1), \ldots, (x_n, y_n)\} {
(x0,y0),(x1,y1),…,(xn,yn)},其中 x i x_i xi 和 y i y_i yi 是长度为 m m m 的列向量。现在,我们定义两个 m × n m \times n m×n 矩阵:
X = [ x 0 x 1 … x n ] , Y = [ y 0 y 1 … y n ] X = \begin{bmatrix}x_0 & x_1 & \ldots & x_n\end{bmatrix}, Y = \begin{bmatrix}y_0 & y_1 & \ldots & y_n\end{bmatrix} X=[x0x1…xn],Y=[y0y1…yn]
如果我们将符号 A A A 定义为
A = Y X † A = YX^{\dagger} A=YX†
其中 X † X^{\dagger} X†是 X X X的伪逆4,则对 ( X , Y ) (X, Y) (X,Y) 的动态模式分解由 A A A 的特征分解给出:即DMD模式和特征值是A的特征向量和特征值。
上面的定义来自 (Tu et al)2 ,被称为 exact DMD。它是当前最通用的定义,可以应用于满足给定要求的任何数据集。
在这篇文章中,我们对A满足(或近似满足)方程 y i = A x i , ∀ i y_i = Ax_i, \forall i yi=Axi,∀i的情况最感兴趣:
Y = A X Y =AX Y=AX
X X X 是一组输入向量, Y Y Y是相应的输出向量集合。 DMD的这种表述非常强大,因为它为分析(和预测)控制方程未知的动力学系统提供了一种便捷的方法。
乍一看,寻找 A = Y X † A = YX^{\dagger} A=YX† 的特征分解的任务似乎没什么大不了的。确实,当 X X X 和 Y Y Y 的大小合理时,从 Numpy 或 MATLAB 调用pinv
和eig
方法可以解决问题。当 A ∈ R m × m A \in \mathbb{R}^{m \times m} A∈Rm×m 确实很大时,特征分解可能变得麻烦。
幸运的是,借助 exact DMD算法,可以将问题分解为如下几个子任务。
对 X X X 奇异值分解,可以选择同时执行低阶截断:
X = U Σ V ∗ X =U\Sigma V^∗ X=UΣV∗易知 X † = V Σ − 1 U ∗ , A = Y V Σ − 1 U ∗ X^{\dagger} = V\Sigma^{-1} U^∗, A = YV\Sigma^{-1} U^∗ X†=VΣ−1U∗,A=YVΣ−1U∗.
计算 A ~ \tilde{A} A~,即将完整矩阵 A A A 投影到 U U U 上:
A ~ = U ∗ A U = U ∗ Y X † U = U ∗ Y V Σ − 1 \tilde{A} = U^*AU = U^*YX^{\dagger}U=U^*YV\Sigma^{-1} A~=U∗AU=U∗YX†U=U∗YVΣ−1
计算 A ~ \tilde{A} A~ 的特征值 λ i \lambda_i λi 和特征向量 w i w_i wi:
A ~ W = W Λ \tilde{A}W =W\Lambda A~W=WΛ
从 W W W和 Λ \Lambda Λ 重构 A A A 的特征分解。 A A A的特征值等于 A ~ \tilde{A} A~ 的特征值。 A A A 的特征向量由 Φ \Phi Φ 的列给出:
A Φ = Φ Λ , Φ = Y V Σ − 1 W A\Phi = \Phi \Lambda,\Phi = YV\Sigma^{-1}W AΦ=ΦΛ,Φ=YVΣ−1W
因为
A Φ = Y V Σ − 1 U ∗ Y V Σ − 1 W = Y V Σ − 1 A ~ W = Y V Σ − 1 W Λ = Φ A \begin{aligned} A\Phi &= YV\Sigma^{-1} U^∗YV\Sigma^{-1}W \\ &= YV\Sigma^{-1}\tilde{A} W \\ &= YV\Sigma^{-1} W \Lambda \\ &= \Phi A \end{aligned} AΦ=YVΣ−1U∗YVΣ−1W=YVΣ−1A~W=YVΣ−1WΛ=ΦA
在参考文献12中可以找到对该算法推导的更深入的解释。以上是 exact DMD模式。
从理论上讲, Φ ∘ = U W \Phi^\circ = UW Φ∘=UW 是 Φ \Phi Φ 的另一推导,也称为 projected DMD 模式:
A Φ ∘ = Y V Σ − 1 U ∗ U W = Y V Σ − 1 W = U U ∗ Y V Σ − 1 W = U A ~ W = U W Λ = Φ ∘ Λ \begin{aligned} A\Phi^\circ &= YV\Sigma^{-1} U^∗UW \\ &= YV\Sigma^{-1}W \\ &=U U^∗YV\Sigma^{-1} W \\ &= U \tilde{A} W \\ &= U W \Lambda \\ &= \Phi^\circ \Lambda \end{aligned} AΦ∘=YVΣ−1U∗UW=YVΣ−1W=UU∗YVΣ−1W=UA~W=UWΛ=Φ∘Λ
本文仅考虑方程式 Y = A X Y = AX Y=AX 的两种解释。
第一种解释是 A A A定义了一个差分方程:
x i + 1 = A x i x_{i + 1} = Ax_i xi+1=Axi
在这种情况下,算子 A A A 动态系统状态 x i x_i xi 在时间上向前迈出了一步。
假设我们有一个时间序列 D D D:
D = [ x 0 x 1 … x n + 1 ] D = \begin{bmatrix}x_0 & x_1 & \ldots & x_{n+1}\end{bmatrix} D=[x0x1…xn+1]
其中 x i x_i xi 是在时间步 i i i 处定义系统的 m m m 维状态的列向量。可以这样定义 X X X 和 Y Y Y:
X = [ x 0 … x n ] , Y = [ x 1 … x n + 1 ] X = \begin{bmatrix}x_0 & \ldots & x_{n}\end{bmatrix}, \quad Y = \begin{bmatrix} x_1 & \ldots & x_{n+1}\end{bmatrix} X=[x0…xn],Y=[x1…xn+1]
这样,来自 X X X和 Y Y Y 的每对列向量对应于差分方程式的单次迭代:
Y = A X Y = AX Y=AX
使用DMD,计算特征分解 A Φ = Φ Λ AΦ=ΦΛ AΦ=ΦΛ。掌握了DMD模式和特征值,动态系统的状态方程可写成:
x k + 1 = A x k = Φ Λ Φ † x k x_{k+1} = Ax_k = ΦΛΦ^\dagger x_k xk+1=Axk=ΦΛΦ†xk
因此系统状态关于时间步 k k k 的表达式为:
x k = Φ Λ k Φ † x 0 x_k =ΦΛ^kΦ^\dagger x_0 xk=ΦΛkΦ†x0
若离散时间步长为 Δ t Δt Δt,连续时间 t t t 中的对应函数为
x ( t ) = Φ Λ t / Δ t Φ † x ( 0 ) x(t) = ΦΛ^{t/\Delta t}Φ^\dagger x(0) x(t)=ΦΛt/ΔtΦ†x(0)
真正令人惊讶的是,仅使用数据就及时定义了显式函数!这是无方程式建模的一个很好的例子。
本文讨论的 Y = A X Y = AX Y=AX 的第二种解释是 A A A定义了一个微分方程组:
x ˙ = A x \dot{x}= Ax x˙=Ax
在这种情况下,矩阵 X X X 和 Y Y Y 将由向量场的 n n n 个样本组成: X X X 的第 i i i 列是位置向量 x i x_i xi; Y Y Y 的第 i i i 列是速度向量 x ˙ \dot{x} x˙。
在计算DMD之后,时间函数与之前差分方程的情形非常相似。如果 x ( 0 ) x(0) x(0) 是任意初始条件,而 t t t 是连续时间,则
x ( t ) = Φ exp ( Λ t ) Φ † x ( 0 ) x(t) = Φ\exp(Λt) Φ^\dagger x(0) x(t)=Φexp(Λt)Φ†x(0)
Kutz, J. Nathan. Data-driven modeling & scientific computation: methods for complex systems & big data. OUP Oxford, 2013. ︎ ︎
Tu, Jonathan H., et al. “On dynamic mode decomposition: theory and applications.” arXiv preprint arXiv:1312.0041 (2013). ︎ ︎ ︎
Wikipedia contributors. “Composition operator.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 28 Dec. 2015. Web. 24 Jul. 2016. ︎
Wikipedia contributors. “Moore–Penrose pseudoinverse.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 12 May. 2016. Web. 24 Jul. 2016. ︎
文章浏览阅读118次。一、概述dba在工作中避不开的两个问题,sql使用绑定变量到底会有多少的性能提升?数据库的审计功能如果打开对数据库的性能会产生多大的影响?最近恰好都碰到了,索性做个实验。sql使用绑定变量对性能的影响开通数据库审计功能对性能的影响实验采用的办法很简单,就是通过python读取csv文件,然后将其导入到数据库中,最后统计程序执行完成所需要的时间二、准备脚本python脚本dataimporttest..._python oracle 缓存
文章浏览阅读1.5k次,点赞2次,收藏2次。 使用hexo+next+github/coding+gitalk添加博客评论系统,以及hexo+next+码云+issue,这里使用的是next主题,如有问题,可以在博客下方评论。免费个人博客预览next主题添加gitalk准备在使用gitalk作为评论系统之前,需要在github上注册新的应用; 注册GitHub应用链接。按如下描述填写:填写完成后,点击绿色按钮,跳转到一下页..._githubhexo评论
文章浏览阅读277次。 传统的Spring框架实现一个Web服务,需要导入各种依赖JAR包,然后编写对应的XML配置文件等,相较而言,Spring Boot显得更加方便、快捷和高效。那么,Spring Boot究竟如何做到这些的呢?依赖管理问题:(1)为什么导入dependency时不需要指定版本? 在Spring Boot入门程序中,项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter-web,关于这两个依赖的相关介绍具体_spring-autoconfigure-metadata.properties
文章浏览阅读7.2k次。访问量:12word2013使用起来很快,效果很好,可是发觉一个问题,word2013在win7和win8上老出一个问题,就是插入图表后,无法直接保存,保存点之后还是不能;另一个问题就是插入图表之后,就不能调出数据进行编辑,但是在任务管理器里看到有excel个进程的。这个两个问题是同步出现,过去一直以为是word本身的问题,一直等到微软出新的word2013补丁,安装到今天还是老样子,偶然的机会解..._图表点编辑数据无反应
文章浏览阅读7.4k次,点赞17次,收藏70次。单细胞项目:来自于30个病人的49个组织样品,跨越3个治疗阶段Therapy-Induced Evolution of Human Lung Cancer Revealed by Single-Cell RNA Sequencing这篇教程我将分为四个阶段完整的阐述单细胞的主流的下游分析流程数据预处理(数据准备阶段)seurat 基础分析免疫细胞识别inferCNV 的实现先来第一部分数据预处理这里的数据预处理很自由,其中一部分是必须按照严格的标准进行比如计算外源基因,线粒体, 核糖_seurat
文章浏览阅读131次。今天对之前学习的知识进行回顾总结:1、私有化private修饰的,只能在本类当中进行使用;Student stu = new Student();stu.name = “aa”;//这是一个错误写法,//name是私有化的,只能在父类当中进行使用,private修饰的成员变量name只能在本类进行使用;在测试类中不可以直接进行使用;2、构造方法:new对象就是在调用构造方法【1】Stu..._java基基 的公众号] 输入 百事可乐 获取验证码,
文章浏览阅读212次。算法简介选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述和实现n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:<1>.初始状态..._选择排序用不用交换数字
文章浏览阅读242次。本篇教程介绍了Node.js教程 阿里云mysql如何支持存储emoji表情,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。<本篇主要记录nodejs项目阿里云mysql如何支持存储emoji表情。因由最近项目遇到用户在文本输入emoji进行存储的时候导致存储失败的问题。经本地调试发现emoji表情在存储时转成的四个字节(\xF0\x9F\x90\xAC)导致se..._用node.js使mysql可以存储图片吗
文章浏览阅读1.4k次,点赞3次,收藏2次。当一个线程已经获得了锁,但在持有锁的代码块中又调用了另一个需要同样锁的方法时,如果使用非可重入锁,线程会因为无法再次获得同一个锁而陷入死锁状态。通过调用lock()方法获取锁,再调用unlock()方法释放锁,可以实现多次获取和释放同一个锁的操作。在存款(deposit)和取款(withdraw)方法中,首先使用lock.lock()获取锁,然后执行相应的操作,最后使用lock.unlock()释放锁。可重入锁(Reentrant Lock),也称为递归锁,是一种支持同一个线程多次获取同一个锁的锁机制。_可重入锁
文章浏览阅读458次。今天安装了一个Redis ,但是在客户端 redis-cli 中使用的时候,每打一个字符就会跟着一个127.0.0.1:6379>跳出来。如下图所示:不影响命令的返回结果。但是很让人头大,经过查询时中断工具 SecureCRT的原因。只用改动一个配置就行了。设置当前的Session Options–>Terminal–>Emulation–>Terminal为L..._在客户端 redis-cli 中使用的时候,每打一个字符就会跟着一个127.0.0.1
文章浏览阅读4.2k次,点赞7次,收藏19次。问题之前我们讨论的 PCA降维,对样本数据来言,可以是没有类别标签 y 的。如果我们做回归时,如果特征太多,那么会产生不相关特征引入、过度拟合等问题。我们可以使用PCA 来降维,但 PCA 没有将类别标签考虑进去,属于无监督的。假设我们对一张 100*100 像素的图片做人脸识别, 每个像素是一个特征,那么会有 10000 个特征,而对应的类别标签y仅仅是 0/1 值, 1 代表是人脸..._lda线性判别分析
文章浏览阅读1.3k次。项目上线前的说明:第一:这里使用的本地缓存的包。即有个功能是访问对应商品id下的商品列表即localhost:8080/?id=2 这里对id=2的商品收藏,会将对应状态保留在本地localStorage中,模拟了存放在服务器的状态一隐藏功能:本人自己加了对应id下的tab切换会被记录在对应的id下,切换其他的id再回来或者直接刷新对应的id商品tab不会被初始化!第二:即将加..._vue 删除线字体