基于G-P算法的非线性时间序列关联维数计算系统
项目简介
这是一个基于MATLAB环境开发的非线性动力学分析工具,旨在通过经典的Grassberger-Procaccia (G-P) 算法计算时间序列的关联维数(Correlation Dimension, $D_2$)。该系统不仅实现了核心算法,还集成了数据生成、预处理、相空间重构、双对数曲线拟合及结果可视化的一站式流程。该工具主要用于识别系统的混沌特性,通过分析关联维数随嵌入维数的饱和趋势,有效区分确定性混沌信号与随机噪声。
功能特性
- 混沌数据生成:内置Lorenz混沌系统生成器,使用四阶Runge-Kutta法生成标准测试数据。
- 相空间重构:支持基于时间延迟($tau$)和嵌入维数($m$)的一维序列向高维相空间映射。
- 高效距离计算:针对不同数据规模实现了两种距离计算策略(矩阵分解法与分块广播法),在保证计算速度的同时优化内存占用。
- 自动化G-P计算:支持在指定范围内遍历嵌入维数,自动统计关联积分 $C(r)$。
- 线性标度区拟合:也就是无标度区(Scaling Region)的识别,系统自动截取双对数坐标下的中间线性段进行最小二乘拟合,提取斜率。
- 多维可视化:提供四合一的综合分析图表,包括原始时间序列、2D相图投影、双对数关联积分曲线簇以及关联维数变化趋势图。
- 饱和趋势判定:自动分析不同嵌入维数下的计算结果,判断系统维数是否收敛,从而判定混沌属性。
系统要求
- MATLAB R2016b 或更高版本(代码中利用了广播运算特性)。
- 不需要额外的工具箱(核心距离计算已通过底层矩阵运算实现,不依赖Statistics and Machine Learning Toolbox)。
- 内存建议:处理3000点以上数据时建议拥有8GB以上运行内存。
使用方法
- 参数配置:在脚本开头的“系统参数设置”部分可以调整数据长度、采样步长、时间延迟 $tau$、嵌入维数扫描范围(默认2-8)以及线性拟合区域占比。
- 运行程序:直接运行主脚本。
- 结果解读:
* 控制台将实时输出当前处理的嵌入维数进度。
* 计算结束后,控制台会打印每个维数对应的关联维数 $D_2$ 表格,并给出是否饱和的判定结论。
* 弹出的图形界面展示了从时域波形到最终维数收敛的全过程分析图。
详细实现原理与算法流程
本项目在单一脚本中完整实现了以下技术流程,逻辑严密且高度模块化:
1. 数据获取与预处理
- Lorenz系统仿真:通过求解Lorenz微分方程组(参数 $sigma=10, beta=8/3, rho=28$)生成三维混沌轨迹。
- 瞬态处理:为了保证吸引子的稳定性,程序自动舍弃了初始阶段的瞬态数据(默认前1000点)。
- 降维与归一化:提取X分量作为观测的一维时间序列,并将其幅值线性映射归一化到 $[0, 1]$ 区间。这一步对于统一关联积分半径 $r$ 的扫描范围至关重要。
2. 相空间重构 (Phase Space Reconstruction)
采用经典的Takens嵌入定理。对于一维时间序列 $x(t)$,根据设定的时间延迟 $tau$ 和嵌入维数 $m$,构造一系列 $m$ 维向量。实现中严格处理了边界条件,确保构建的相点矩阵维度正确($M times m$,其中 $M$ 为重构后的相点数)。
3. 高效欧氏距离计算
这是G-P算法计算量最大的部分。为了在MATLAB中实现高效运算且不溢出内存,代码实现了智能分支策略:
- 小规模数据 ($N < 2000$):采用全矩阵向量化计算。利用公式 $||u-v||^2 = ||u||^2 + ||v||^2 - 2ucdot v$ 一次性计算所有点对距离,极大地利用了MATLAB的矩阵优势。
- 中大规模数据:为了防止生成 $N times N$ 的距离矩阵导致内存溢出(Out of Memory),代码采用分块循环结合自动广播(Broadcasting)的方式,仅计算并存储唯一的点对距离(下三角部分),显著降低了空间复杂度。
4. 关联积分 $C(r)$ 统计
- 半径序列生成:根据计算出的点对距离的最大值和最小值,在对数尺度上等间距生成一系列半径阈值 $r$。
- 积分计算:遍历每一个半径 $r$,统计相空间中距离小于该半径的点对比例,得到关联积分 $C(r)$。
5. 关联维数拟合与分析
- 双对数变换:将 $r$ 和 $C(r)$ 均转换为自然对数坐标 $ln r$ 和 $ln C(r)$。
- 数据清洗:自动剔除计算过程中可能产生的 Inf(无穷大)和 NaN(非数字)点。
- 线性拟合:根据预设比例(默认为数据段的20%至70%)截取中间段数据,认为该区域为线性标度区。使用
polyfit 进行一次多项式拟合,拟合直线的斜率即为当下的关联维数估计值。 - 饱和判定:程序最后绘制 $D_2$ 随 $m$ 增加的变化曲线。若随着 $m$ 增大,$D_2$ 趋于一个稳定值(代码中通过监测最后两点斜率差值是否小于0.1判定),则认为该系统存在混沌吸引子;若 $D_2$ 随 $m$ 线性增加不收敛,则提示可能为随机噪声。
关键函数说明
基于四阶Runge-Kutta法(RK4)迭代求解Lorenz微分方程组,生成原始的混沌时间序列数据。
定义Lorenz系统的状态方程,描述系统的动力学演化规则。
实现相空间重构的核心逻辑,根据输入的序列、嵌入维数和延迟时间,将一维数据转化为矩阵形式的高维相点集。
核心运算函数。计算相空间中所有点对之间的欧几里得距离。该函数内部实现了内存优化逻辑,根据数据量大小自动选择全矩阵计算或循环广播计算,并仅返回必要的下三角距离数据以节省资源。