基于CAO方法的Duffing方程嵌入维数求解系统
项目简介
本项目是一个基于MATLAB开发的动力学分析系统,旨在通过Cao氏方法(Cao's Method)确定非线性混沌系统的最小嵌入维数。项目以典型的Duffing振子方程为研究对象,实现了从数值求解、数据预处理到算法核心计算及结果可视化的全流程。该系统能够帮助研究人员判断重构相空间所需的最佳维数,为后续的混沌特性分析(如Lyapunov指数计算、吸引子重构)奠定基础。
功能特性
- 混沌信号生成:利用四阶龙格-库塔法(Runge-Kutta)求解Duffing方程,生成具有混沌特性的时间序列数据。
- 混沌判据计算:完整实现了Cao氏算法,计算 $E1(d)$ 和 $E2(d)$ 两个关键统计指标。
- 智能维数判定:内置自动判定逻辑,根据 $E1(d)$ 的饱和趋势自动推荐最佳的最小嵌入维数 ($m$)。
- 信号预处理:包含去除瞬态效应、数据归一化以及简单的滑动平均去噪功能。
- 多维可视化:自动生成包含时间序列波形、二维相图重构、E1指标变化曲线及E2指标变化曲线的综合图表。
系统要求
- MATLAB R2016a 或更高版本
- 标准MATLAB安装(无需额外工具箱,使用基础绘图和ODE求解功能)
使用方法
- 确保MATLAB当前工作目录包含项目脚本。
- 直接运行主函数
main。 - 系统将自动执行计算,在控制台输出各维度的 $E1$、$E2$ 值及推荐维数,并弹出结果分析图形窗口。
详细功能与算法实现逻辑
本系统的核心逻辑完全集中在 main 函数及其内部子函数中,具体实现细节如下:
1. 动力学方程求解
系统首先定义了Duffing方程的参数:阻尼系数 ($delta=0.3$)、恢复力系数 ($alpha=-1.0$)、非线性项系数 ($beta=1.0$)、策动力幅值 ($gamma=0.50$) 和频率 ($omega=1.2$)。这些参数组合被选定以产生混沌行为。
- 使用 MATLAB 内置的
ode45 求解器对微分方程进行数值积分。 - 求解时间设定为 0 到 500 秒,步长为 0.05 秒。
- 瞬态处理:代码逻辑中明确去除了前 100 秒的数据,以消除初始条件引起的瞬态效应,确保分析的是系统的稳定混沌吸引子。
2. 数据预处理
为了提高算法的鲁棒性,对提取的位移分量 $x(t)$ 进行了以下处理:
- 归一化:将时间序列线性映射到 [0, 1] 区间,消除量纲影响。
- 去噪:应用了窗口大小为 3 的简单滑动平均滤波器。为了避免滤波带来的边缘效应,代码自动切除了滤波后的起始数据点,保证序列的完整性。
3. Cao氏算法核心实现
通过内部函数
calculate_cao_metrics 实现,具体步骤如下:
- 相空间重构:根据设定的延迟时间 $tau=10$,构建从维度 $d=1$ 到 $d_{max}$ 的相空间向量。为保证不同维度计算的一致性,使用了有效长度截断策略。
- 最近邻搜索:对于相空间中的每一个点,计算其与其他所有点的欧几里得距离,并找到最近邻点。
- 指标计算:
*
E1(d):计算从 $d$ 维扩展到 $d+1$ 维时,最近邻点距离的平均变化率。该指标用于判断吸引子是否完全展开。
*
E2(d):计算平均距离的绝对变化比率。该指标用于辅助区分信号是确定性混沌还是随机噪声。
4. 最小嵌入维数判定逻辑
程序实现了一套自动化的判定规则,不再仅仅依赖人工观察:
- 设定饱和阈值为 0.95。
- 遍历计算出的 $E1$ 值,寻找满足以下条件的最小维度 $d$:
1. $E1(d)$ 大于等于阈值 (0.95)。
2. $E1(d)$ 的增量变化趋于平缓(与下一维度的差值绝对值小于 0.05)。
- 一旦满足条件,判定最小嵌入维数 $m = d + 1$。
5. 结果可视化
系统最终生成一个包含四个子图的窗口:
- 左上:展示去噪和归一化后的部分时间序列,直观显示混沌波形。
- 右上:基于延迟坐标 ($tau=10$) 绘制二维相图 ($x(t)$ vs $x(t+tau)$),展示吸引子的低维投影结构。
- 左下:绘制 $E1(d)$ 随维度变化的曲线,并用红色标记出系统推荐的最小嵌入维数位置,辅助用户验证判定结果。
- 右下:绘制 $E2(d)$ 曲线,用于分析信号的随机性程度。