在前面 非线性可视化(3)混沌系统 这一篇文章中,介绍了一个系统因为某个常数的改变,从而导致整个系统发生变化的例子。比如Duffing系统,随着阻尼d的增大,系统由混沌变为倍周期,又变为周期运动。想要描述系统的某个参数变化,导致的系统本质的改变,就需要引入分岔图。
-
1 离散系统的分岔图
离散系统中的混沌现象非常普遍,通常经过简单的非线性方程,然后进行反复迭代就很容易出现。这种迭代产生的混沌十分简单,甚至不需要编程,随手用excel就可以展示其混沌现象:
离散系统的分岔图绘制方法,就是记录不同参数改变后,系统稳定点的位置。然后绘制出散点图,其中横坐标为参数,纵坐标为每个参数对应的稳定位置。
稳定位置常见计算方法有两种。举个例子来说明,一种是先分布100个不同的种子点,迭代999次,然后记录这100个点现在的位置。另一种是只有1个种子点,迭代999次,然后记录这个点999次里每一次的位置。
首先以一个一维离散系统为例,采用经典的Logistic系统,迭代方程如下:
方程的参数为a。对于每一个a,都先在[0,1]区间内生成若干xi,然后经过长时间迭代直至收敛后,记录下每一个xi的值。效果如下:
一维的分岔图非常的直观,因为变量只有1个。对于二维的分岔图,需要先将结果投影到一维上,然后再绘制。
下面举一个二维离散系统的例子,用的是Henon系统为例,迭代方程如下:
这里固定b=0.3,来改变a的值。这里由于是二维,采用第一种方法,每个维度都铺上初始点的话,计算量会比较大。所以采用第二种方法,用单个初始值,经过迭代后记录每一步过程。
上图为选取不同的a值,观察其x、y值随着迭代的变化。当a=0.2时,系统为能够收敛在一个固定的点上。当a=0.95,系统最终在4个不同点上来回跳动。当a=1.036,系统变为在8个点上来回跳动。当a=1.076,系统变为在几根线段上来回跳动。直到a=1.38,系统开始进入混沌。
我们可以只取y值,把这些点投影到1维。然后就可以仿照前面的一维分岔图,绘制出Henon系统的分岔图,完整代码见文末:
-
2 连续系统的分岔图
连续系统的分岔图做法需要参考离散系统分岔图的方法。首先将连续系统降维为离散系统,然后再降维为一维点分布,然后绘图。其中通常参考上面二维离散系统的散点分布图,利用连续系统的庞加莱截面来替代。这也是有些地方说庞加莱截面是沟通连续与离散的桥梁的直观体现。
因此,连续系统的分岔图绘制方法分为三步,首先计算出庞加莱截面,然后投影为一维的点分布,然后绘制到分岔图上。
这里以Rossler方程为例,依然固定a=0.1,b=0.1,然后改变c的值,做系统的分岔图如下,完整代码见文末。
一般庞加莱截面的位置选取会改变分岔图的样子,但是通常不会改变分岔点的位置。因为分岔点的位置是由系统本身所决定。
非线性可视化这个专题就先到此为止,还剩下两个非线性分析常用的方法没有介绍:功率谱法和拉雅普诺夫指数法。这两个都不属于可视化的范围内,所以这次没有写到,之后可能有机会再单独写一篇。其中功率谱法一般就是直接一个fft求出频率,然后把幅值平方,观察信号的频谱特性。李雅普诺夫指数法则是一种定量化分析系统分岔的方法,类似于分岔图,但是可以计算出一个数。李雅普诺夫指数反映开始相邻的两个点随着系统迭代后,两个点距离是变大还是缩小。
这个方向可能比较小众,很多地方需要事先建立模型方程。混沌这方面很多方法看似很成熟,但是都不太容易说出个所以然。希望能够帮到涉及到信号振动之类研究的,同时想分析非线性的同学们。
如需获取本文源代码,请关注懂科学的程序员公众号,回复“分岔图”获取!
参考资料:
[1]https://blog.csdn.net/xiangger/article/details/113664682
[2]https://wenku.baidu.com/view/0bf3f494172ded630b1cb6b1.html
[3]Santo Banerjee. Applications of Chaos and Nonlinear Dynamics in Engineering[M]. Springer, 2011
[4]Ali.H.Nayfeh. Applied Nonlinear Dynamics Analytical, Computational, and Experimental Methods[M]. 1995.(用到了P284里面的Henon系统)
[5]计算物理基础-第10章第77讲(北京师范大学)(中国大学MOOC)计算物理基础_北京师范大学_中国大学MOOC(慕课) (icourse163.org)
[6]詹姆斯·格雷克. 混沌:开创新科学[M].