时间延迟嵌入定理 Time-Delay Embedding Theorem 以及C++实现例子

时间延迟嵌入定理(Time-Delay Embedding Theorem),也称为Takens嵌入定理,由荷兰数学家Floris Takens在1981年提出。这个定理在动力系统理论中非常重要,特别是在从实验数据重建动力系统的状态空间模型方面具有广泛应用。时间延迟嵌入定理为我们提供了一种方法,通过观测到的单一时间序列数据来重构整个动力系统的相空间,即便原系统的全部状态变量未知。

基本概念

在动力系统分析中,我们通常希望从系统的状态向量演化来理解系统行为。然而,在实际应用中,我们可能无法直接观察到全部的状态变量,而只能获取单一或有限几个变量的时间序列数据。

定理内容

Takens定理指出,如果我们有一个光滑的动态系统,并从中测量一个变量,那么通过将这个变量在不同时间点的值组成向量(通过时间延迟嵌入),就有可能在一个高维空间中重构出与原系统动力学等价的相空间。具体来说,这个过程是通过构造一个向量序列来实现的:
[ x ( t ) = [ x ( t ) , x ( t + τ ) , x ( t + 2 τ ) , … , x ( t + ( m − 1 ) τ ) ] ] [ \mathbf{x}(t) = \left[ x(t), x(t+\tau), x(t+2\tau), \dots, x(t+(m-1)\tau) \right] ] [x(t)=[x(t),x(t+τ),x(t+2τ),,x(t+(m1)τ)]]
其中, x ( t ) x(t) x(t)是观测的时间序列数据,$ τ \tau τ是选定的时间延迟, m m m是嵌入维数,通常由数据和应用决定。

选择延迟和维数

  • 延迟 τ \tau τ:选择一个合适的延迟是关键,这通常通过数据的自相关函数或互信息函数来确定,以确保嵌入向量的各个分量不是完全相关的。
  • 嵌入维数 m m m:理论上,嵌入维数至少应该是系统自由度的两倍加一。在实践中,选择嵌入维数通常依赖于假设最小数据冗余和避免过度拟合之间的权衡。

C++实现

要在C++中实现时间延迟嵌入,你需要做的是从原始的时间序列数据中创建一个新的矩阵或向量集,其中每个向量都包含了原始数据中以特定时间延迟为间隔的点。下面是一个C++代码示例,展示了如何从一个给定的信号 x(t) 创建一个时间延迟嵌入矩阵:

#include <iostream>
#include <vector>// 函数用于生成时间延迟嵌入矩阵
std::vector<std::vector<double>> timeDelayEmbedding(const std::vector<double>& signal, int m, int tau) {// 确保输入的参数有效int N = signal.size();int embeddedLength = N - (m - 1) * tau;if (embeddedLength <= 0) {std::cerr << "Error: The combination of embedding dimension and delay is too large." << std::endl;return {}; // 返回空矩阵}std::vector<std::vector<double>> embedding(embeddedLength, std::vector<double>(m));// 填充嵌入矩阵for (int i = 0; i < embeddedLength; ++i) {for (int j = 0; j < m; ++j) {embedding[i][j] = signal[i + j * tau];}}return embedding;
}int main() {// 示例信号数据std::vector<double> signal = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0};// 嵌入维度和时间延迟int m = 3;  // 嵌入维度int tau = 1;  // 时间延迟// 生成时间延迟嵌入矩阵std::vector<std::vector<double>> embeddedMatrix = timeDelayEmbedding(signal, m, tau);// 打印结果std::cout << "Time-Delay Embedded Matrix:" << std::endl;for (const auto& row : embeddedMatrix) {for (double val : row) {std::cout << val << " ";}std::cout << std::endl;}return 0;
}

打印结果为:
Time-Delay Embedded Matrix:
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
8 9 10

当 int m = 3; // 嵌入维度
int tau = 2; // 时间延迟
时,输出的结果为:
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
6 8 10

代码解释:

  1. 函数定义timeDelayEmbedding接受原始信号(signal),嵌入维度(m)和时间延迟(tau)作为输入。
  2. 错误处理:检查生成的嵌入矩阵长度是否合法。
  3. 嵌入过程:通过两层循环生成时间延迟嵌入矩阵。外层循环控制行,内层循环控制列,即每个时间点的延迟数据。
  4. 打印结果:在主函数中,生成的嵌入矩阵被打印出来,以便于验证结果。

总结

时间延迟嵌入可以使我们通过时间序列中的单变量观测数据来重构系统的动态特性,但它并不增加新的信息量。所有的信息都是从原始信号中提取的,时间嵌入的向量通过映射保存了原始系统的动力学特征,但没有新增额外的信息。这使得时间嵌入方法成为了理解和分析复杂系统行为的有力工具。它特别适用于那些难以获得系统全部状态信息的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/3862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js箭头函数的this

结论 箭头函数没有自己的this箭头函数的this取决于父级的作用域箭头函数的this在函数定义的时候就已经确定了&#xff0c;但是普通函数的this是在运行的时候才能确定的&#xff0c;因为要看是谁调用它的&#xff1b;所以箭头函数的this不会受到调用方式的影响&#xff0c;是静…

【U+】U+智享版运维平台账号密码重置

【问题描述】 友加畅捷系列中的U智享版软件&#xff0c; 系统运维平台账号admin密码忘记了&#xff0c;无法登录。 【解决方法】 在软件的安装目录下&#xff0c;找到sysconfig_accounts文件&#xff0c;并删除。 【路径&#xff1a;X:\U系列软件\U智享版\WebSite\config\】 …

【ZZULIOJ】1082: 敲7(多实例测试)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输出7和7的倍数&#xff0c;还有包含7的数字例如&#xff08;17&#xff0c;27&#xff0c;37...70&#xff0c;71&#xff0c;72&#xff0c;73...&#xff09; 输入 首先输入一个整数t&#xff…

制造业企业做图纸的怎么才能做好cad加密,什么cad加密软件最好?

众所周知&#xff0c;通常CAD图纸中包含着大量的设计数据和产品信息&#xff0c;所以无论对于CAD设计工程师&#xff0c;还是对于企业&#xff0c;如何保障CAD图纸信息数据安全都是十分重要的。 很多企业通过购买第三方安全软件来加密保护CAD设计图纸&#xff0c;但第三方安全软…

【算法基础实验】图论-UnionFind连通性检测之quick-union

Union-Find连通性检测之quick-union 理论基础 在图论和计算机科学中&#xff0c;Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合&#xff08;即连通分量&#xff09;的情况&#xff0c;并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fi…

AI技术宝库:一键收藏全球最全面的人工智能资源网站

1、KKAI&#xff08;kk.zlrxjh.top&#xff09; R5AI是一种融合了星火大模型与文心大模型的知识增强型大语言模型&#xff0c;主要聚焦于自然语言处理&#xff08;NLP&#xff09;的技术开发。 该模型具有卓越的语义理解和文本生成能力&#xff0c;可以有效处理多种复杂的自然语…

python爬虫-----深入了解 requests 库下篇(第二十六天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

M-LAG的基本概念

如图所示&#xff0c;用户侧设备Switch&#xff08;可以是交换机或主机&#xff09;通过M-LAG机制与另外两台设备&#xff08;SwitchA和SwitchB&#xff09;进行跨设备链路聚合&#xff0c;共同组成一个双活系统。这样可以实现SwitchA和SwitchB共同进行流量转发的功能&#xff…

MySQL查出时间比实际晚8小时的解决方案

查询出来的日期数据比数据库中日期数据晚8小时&#xff0c;一开始很懵逼&#xff0c;IDEA 和 server 时区都一样呢&#xff01;后来发现&#xff1a; jdbcUrljdbc:mysql://localhost:hentai?useUnicodetrue&characterEncodingUTF-8&useJDBCCompliantTimezoneShifttru…

C++11单例模式

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

16(第十五章,数据管理成熟度评估)

目录 概述 数据管理成熟度等级 基本概念 评级等级以及特点 现有的DMMA框架 活动 方法 扩展 概述 数据管理成熟度等级 1) 0 级。无能力级。2) 1 级。初始级或临时级&#xff1a;成功取决于个人的能力。3) 2 级。可重复级&#xff1a;制定了最初级的流程规则。4) 3 级。…

【webrtc】m114自己实现的PrioritizedPacketQueue及优先级处理

G:\CDN\WEBRTC-DEV\libwebrtc_build\src\modules\pacing\prioritized_packet_queue.h跟m98不同 :webrtc】m98 RoundRobinPacketQueue的优先级处理,m114直接使用taskqueue顺序处理了。甚至自己实现了优先级队列感觉简化了实现,更为清晰 易读,但是去掉了码率低就优先的逻辑。1…

C 语言实例 - 两个浮点数相乘

输入两个浮点数&#xff0c;计算乘积。 #include <stdio.h>int main() {float num1, num2, product;printf("请输入第一个浮点数: ");scanf("%f", &num1);printf("请输入第二个浮点数: ");scanf("%f", &num2);product …

企业计算机服务器中了rmallox勒索病毒怎么办?Rmallox勒索病毒解密流程工具

在网络飞速发展的时代&#xff0c;企业离不开网络&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;加快了企业进步的步伐&#xff0c;依靠网络可以开展各项工作业务&#xff0c;通过网络数据整合&#xff0c;可以更方便企业办公。网络在为企业提供便利的同时也为企…

ESLint 、 e2e test 学习

Lint和Format的区别&#xff1a; Lint只会告诉你代码中的错误或者不符合规范的地方&#xff0c;而Format是用来对格式作调整的 HTML/tpl&#xff1a;HTMLLint CSS/SCSS&#xff1a;Stylelint JS/JSX&#xff1a;Eslint JSLint&#xff1a;古老&#xff0c;不能配置和扩展JSHin…

【C++类和对象】日期类的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Post请求中常见的Content-Type类型

Post请求中常见的Content-Type类型的结构 &#xff08;1&#xff09;application/x-www-form-urlencoded 这是浏览器原生的form表单类型&#xff0c;或者说是表单默认的类型。 下面是一个请求实例&#xff1a; 请求报文&#xff1a; 可以看得出&#xff0c;post将请求参数以k…

搭建vue3组件库(一):Monorepo架构搭建

文章目录 1. 以 pnpm 构建 monorepo1.1 全局安装 pnpm1.2 配置 pnpm 的 monorepo 工作区1.3 仓库项目内的包相互调用1.4 TypeScript 初始化配置文件2. 通用配置文件2.1 添加 .editorconfig 编辑器格式配置文件2.2 添加 .gitignore git 忽略文件2.3 添加 .npmrc npm配置文件2.4 …

两个列表联动修改选中标题的时机

在iOS UI中&#xff0c;常常遇到这种场景&#xff0c;就是我们有两个列表&#xff0c;一个 列表是标题&#xff0c;一个列表是分区的内容&#xff0c;我们滚动内容列表的时候&#xff0c;需要选中当前内容列表中对应的标题&#xff0c; 这个时候&#xff0c;我们有多种实现方案…

了解时间复杂度和空间复杂度

在学习数据结构前&#xff0c;我们需要了解时间复杂度和空间复杂度的概念&#xff0c;这能够帮助我们了解数据结构。 算法效率分为时间效率和空间效率 时间复杂度 一个算法的复杂度与其执行的次数成正比。算法中执行基础操作的次数&#xff0c;为算法的时间复杂度。 我们采…