概念

Logistic映射,又称单峰映象,是一个二次多项式映射(递归关系),经常作为典型范例来说明复杂的混沌现象是如何从非常简单的非线性动力学方程中产生的。生物学家罗伯特·梅 Robert May [1]在1976年的一篇论文中推广了这一映射,它在一定程度上是一个时间离散的人口统计模型,类似于皮埃尔·弗朗索瓦·韦胡斯特 Pierre Francois Verhulst 首次提出的方程。

Logistic映射的数学表达式表示为:
x(t+1)=μx(t)(1−x(t))x(t+1)=\mu x(t)(1-x(t)) x(t+1)=μx(t)(1−x(t))
其中,t为迭代时间步,对于任意的t,x(t)∈[0,1],μ为一可调参数,为了保证映射得到的x(t)始终位于[0,1]内,则μ∈[0,4]。x(t)为在t时刻种群占最大可能种群规模的比例(即现有人口数与最大可能人口数的比率)。当变化不同的参数μ时,该方程会展现出不同的动力学极限行为(即当t趋于无穷大,x(t)的变化情况),包括:稳定点(即最终x(t)始终为同一个数值)、周期(x(t)会在2个或者多个数值之间跳跃)、以及混沌(x(t)的终态不会重复,而会等概率地取遍某区间)。

当μ超过[1,4]时,就会发生混沌现象。该非线性差分方程意在观察两种情形:

  • 当人口规模很小时,人口将以与当前人口成比例的速度增长进行繁殖。

  • 饥饿(与密度有关的死亡率) ,其增长率将以与环境的”承受能力”减去当前人口所得值成正比的速度下降

然而,Logistic映射作为一种人口统计模型,存在着一些初始条件和参数值(如μ >4)为某值时所导致的混沌问题。这个问题在较老的瑞克模型中没有出现,该模型也展示了混沌动力学。

数值实验

0<=μ<=10<=\mu<=10<=μ<=1

左图表示的是当μ=0.2,右图表示的是当μ=0.9的时候方程的迭代结果。每张图都有两条曲线(蓝色和黄色),分别表示从初始值x(0)=0.1和x(0)=0.8开始得到的演化轨迹。可以看出系统趋向于0时候的速度,显然当x(0)=0.1的时候,速度更快。

可以观察到无论系统从何初值开始,也无论μ取什么值,系统最终都会渐进地趋近于0。因此,当0<μ<1时,系统的极限行为趋于0这个固定值。

python代码如下:

import numpy as np
import matplotlib.pyplot as pltx=np.arange(0,100,1)
x0=0.1
x1=0.8
x2=0.1
x3=0.8
u1=0.2
u2=0.9y=[]
y1=[]
y2=[]
y3=[]
y.append(x0)
y1.append(x1)
y2.append(x2)
y3.append(x3)
for i in range(99):y.append(u1*x0*(1-x0))x0=u1*x0*(1-x0)y1.append(u1*x1*(1-x1))x1=u1*x1*(1-x1)y2.append(u2*x2*(1-x2))x2=u2*x2*(1-x2)y3.append(u2*x3*(1-x3))x3=u2*x3*(1-x3)plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文乱码
plt.rcParams['axes.unicode_minus'] = False  # 正负号
plt.figure(1)
plt.subplot(1,2,1)
plt.title('u='+str(u1))
plt.xlabel("t")
plt.ylabel("x(t)")plt.plot(x,y,label='x0=0.1')
plt.plot(x,y1,label="x0=0.8")plt.legend()
plt.subplot(1,2,2)
plt.title('u='+str(u2))
plt.xlabel("t")
plt.ylabel("x(t)")plt.plot(x,y2,label='x0=0.1')
plt.plot(x,y3,label="x0=0.8")
plt.legend()
plt.subplot(1,2,2)plt.legend()
plt.show()

1<μ<31<\mu<31<μ<3

左图展示的是μ=1.2,右图表示的是μ=2.7的时候方程的迭代结果,我们看到,两种情况下,方程的迭代结果仍然收敛于固定值,分别是0.18和0.63。也就是说,这个稳定值可以随着μ发生变化。

从图中得知:

  • 当μ在1到2之间,种群数量会很快接近μ−1μ\frac{μ−1}{μ}μμ−1​,不论最初种群为何值
  • 当μ在2到3之间,人口数在经历一段时间的波动后会趋于稳定值μ−1μ\frac{μ−1}{μ}μμ−1​,其收敛速度满足线性变化。但当μ=3时,比线性收敛还要缓慢。

事实上,只要μ<3μ<3μ<3,系统都会收敛到一个不动点,而这个不动点的数值可以通过求解下列方程而得到:
x∗=μx∗(1−x∗)​x^*=\mu x^*(1-x^*)​ x∗=μx∗(1−x∗)​
得到解为:
x1∗=0,x2∗=μ−1μx^*_1=0,x^*_2=\frac{\mu -1}{\mu} x1∗​=0,x2∗​=μμ−1​
其中,x1∗=0x_1^∗=0x1∗​=0对应的是μ<1μ<1μ<1时候的不动点,x2∗=μ−1μx_2^∗=\frac{μ−1}{μ}x2∗​=μμ−1​对应的是μ>1μ>1μ>1时候的不动点。

所谓的迭代不动点,也就是:一旦出现某一个TTT使得x(T)=x1∗,x2∗∗x(T)=x_1^∗,x_2*∗x(T)=x1∗​,x2​∗∗,则对任意的t>T都会有:x(t)=x1∗,x2∗x(t)=x_1^∗,x_2^∗x(t)=x1∗​,x2∗​。

这就是上述两种情况。方程会收敛到不动点,并不会再产生新的x(t)x(t)x(t)值。

3<μ<3.63<\mu<3.63<μ<3.6

  • 当μ在3到1+6≈3.449491+\sqrt{6} ≈ 3.449491+6​≈3.44949,在所有的初始条件下,人口数会持续在两个依赖μ的值之间近似永久振荡

这个时候,方程的迭代会出现周期行为。随着μ的增大,周期的长度也会相应地增加。如图所示两种情况,左侧的

周期为2,右侧的周期为4。

当μ为3.2的时候,图形呈现锯齿状,表明x(t)在两个值之间:0.5和0.8上下徘徊。虽然从不同的初始值开始(蓝线

和紫线),系统演化的轨迹并不一样,但是它们的终值却始终是0.5和0.8。

  • 当μ大约在3.44949和3.54409之间,在所有的初始条件下,人口数将在四个值之间近似永久振荡。后一个数字是一个12次多项式的根。

右图展示了当μ=3.5的时候,系统在4个值上下反复跳动即0.87–>0.4–>0.82–>0.5。蓝色的轨迹和紫色的轨迹在初

始略有不同,但是最终收敛到了一起。如果进一步增加μ值,系统还会呈现出更多的周期,包括8周期、16周期……

μ=3.6\mu=3.6μ=3.6

事实上,从μ>3.54以后,系统震荡的周期就变得越来越长。

  • 当μ≈ 3.56995,出现混沌现象,在倍周期级联的末端。在所有的初始条件下,不再观察到有限周期内的振动。 随着时间的推移,初始种群数的微小变化会产生明显不同的结果,这是混沌的主要特征。

  • 3.56995以上的μ值大多表现出混沌行为,但仍有一定的孤立范围表现出非混沌行为;这些岛屿有时被称为稳定岛。例如,从1+81 +\sqrt{8}1+8​(约3.82843)开始, 有一个参数μ的范围,在3个值之间显示μ振荡,在6个值之间显示稍高的μ振荡,然后在12个值之间显示稍高的μ振荡,等等。

直到大概3.6的时候,周期长度趋向于无穷大,此时,系统开始了混沌状态。随着系统的演化,x(t)的值会一直在0.3到0.9之间徘徊,没有固定的周期,而且行为很随机。不同的初始状态演化的轨迹也不重合。

由此可见,这个时候迭代系统表现出随机性,然而整个迭代方程都是确定性的,因此认为产生了确定性的混沌。

3.6<μ<43.6<\mu<43.6<μ<4

当参数μ从大约3.56995变化到3.82843时,Logistic映射的混沌行为的发展过程有时被称为the Pomeau–Manneville scenario,其特征是周期性(层流)阶段被非周期性行为突然打断。

当μ持续增大的时候,迭代运行的轨道就会在周期类型和混沌类型之间来回切换。直到μ=4,系统处于完全混沌的状态,最终的长期行为会在[0,1]区间上均匀分布。

μ=4\mu=4μ=4

μ\muμ 4的特殊之处与μ= 2相同,其可以获得精确的解,虽然,一般情况只能通过统计来预测。

当μ = 4 时,
xn=sin2(2nθπ)x_n=sin^2(2^n\theta\pi) xn​=sin2(2nθπ)
给出初始参数 θ\thetaθ:
θ=1πsin−1(x0)\theta=\frac{1}{\pi}sin^{-1}(\sqrt{x_0}) θ=π1​sin−1(x0​​)
针对有理数的θ,有限次数的迭代后xtx_txt​就会变成一个周期性的数列。不过几乎所有的θ都是无理数,此时xtx_txt​不会重复,因此没有周期解。此解可以清楚的看出混沌的二个重要特征:拉伸及折叠。系数2t2^t2t表示拉伸的指数增长,因此造成蝴蝶效应,也就是对初始值的高度依赖性,而解中包括正弦函数的平方,使解折叠在[0,1]的范围内。

对于μ= 4,用复数代替三角函数的等价解为:
xt=−α2t−α−2t+24x_t=\frac{-\alpha^{2^t}-\alpha^{-2^t}+2}{4} xt​=4−α2t−α−2t+2​
α\alphaα也是复数

其模量为1,正如就像三角函数中的平方正弦函数不会导致点集的缩小或扩大,在后者的解决方案中,可通过α的单位模量来实现该种结果。

相比之下,μ =2的解为:
xt=12−12(1−2x0)2tx_t=\frac{1}{2}-\frac{1}{2}(1-2x_0)^{2^t} xt​=21​−21​(1−2x0​)2t
对于x0∈[0,1)x_0∈[0,1)x0​∈[0,1)。此解没有混沌的特性。由于对不包括不稳定的不动点点0在内的x0x_0x0​,当t趋近无限大时,(1−2x0)2t(1-2x_0)^{2^t}(1−2x0​)2t会趋近于零,因此xt会趋近稳定的不动点12\frac{1}{2}21​。

μ=4\mu=4μ=4时,几乎所有的初值都会使Logistic映射出现混沌特性,不过也存在无限个初值会使Logistic映射最后呈周期性变化。而且对于所有正整数,都存在一初值使Logistic映射的周期为正整数。可以利用 Logistic映射和移位映射 Dyadic transformation之间的关系来找出任何周期的循环。若x依照Logistic映射 xt+1=4xt(1−xt)x_{t+1}=4x_t(1-x_t)xt+1​=4xt​(1−xt​),而y依照移位映射
yt+1={2yt0≤yt<0.5,2yt−10.5≤yt<1,y_{t+1}= {} \left\{ \begin{array}{lr} 2y_t & 0 \leq y_t<0.5, & \\ 2y_t-1 & 0.5\leq y_t<1, \end{array} \right . {} yt+1​={2yt​2yt​−1​0≤yt​<0.5,0.5≤yt​<1,​
则二个变量的关系如下:
xt=sin2(2πyt)x_t=sin^2(2\pi y_t) xt​=sin2(2πyt​)
当y以二进制表示时,映射会将二进制的数字左移一位(若左边的二进制点为1,则这个1会变为0),该种映射也称为二元转换移位映射。例如,如果迭代的二进制扩展中有一个3位重复序列(并不是一个1位重复序列),则会发生长度为3的循环。迭代001001001…映射到010010010…,映射到100100100…,反过来又映射成原来的001001001…;这是一个3循环的移位图。循环节为010, 011, 100, 101, 110 时也会有类似情形。

另外三个二值展开重复序列给出了三次循环110110110…→101101101…→011011011…→110110110。这些循环小数都可以转换为对应的分数,第一个给定的周期为3的循环小数若以分数表示则为:1/7 → 2/7 → 4/7 → 1/7。

将其转换到μ=4的Logistic映射后,所得到的逻辑循环为611260467… → 950484434… → 188255099… → 611260467…。其他周期为3的循环也可以转换为Logistic映射。同样地,任何长度为k的循环都可以在移位映射中找到,然后转换成相应的Logistic映射。

对于μ=4的Logistic映射,此时对应μ= 2的帐篷映射 Tent map。(最小)长度k = 1,2,3,…的循环数是一个已知的整数序列(OEIS中的序列A001037):2,1 ,2、3、6、9、18、30、56、99、186、335、630、1161…这告诉我们,μ=4的Logistic映射具有2个不动点点,长度为2时的周期为1,长度为3时的周期为2,依此类推。对于素数k有序列:22k−1−1k2\frac{2^{k-1}-1}{k}2k2k−1−1​ 例如:2213−1−1132\frac{2^{13-1}-1}{13}213213−1−1​ 是长度为13的循环数。在所有初始条件下,映射都是混乱的,所以这些有限长度的循环都是不稳定的。

不同参数 μ\muμ下的极限行为

不论μ取任意值,最多有一个稳定的周期。 如果存在一个稳定的周期,那么它是全局稳定的,吸引了几乎所有的点。一些具有周期稳定循环的μ在某些时候会有无穷多个不同周期的不稳定循环。

为了概括上述各种数值模拟试验的结果,我们用下面的相图来表示不同μ值对应的极限行为

如图显示的每一个参数μ所对应的迭代的极限行为。

下面动画是在相同的参数下,通过从不同的初始值(共有500个)开始迭代足够多的次数(T=100次),记录下这些数据点对应的x(T)值的变化过程。

python代码如下:

import numpy as np
import matplotlib.pyplot as plt#不同参数u下的极限行为
#横轴为u,纵轴为不同初始条件下的x(t)(迭代T次后的最终结果,不是函数关系而是一个u对应1000个x(t))
xt=np.arange(0.01,1.01,0.01)
#初始值x0个数
m=500
#迭代次数
T=100
#参数u个数
u_num=100
u=np.arange(1/u_num,4+1/u_num,1/u_num)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文乱码
for t in range(1,T+1):#第t次迭代,共T次#初始化横、纵坐标x=np.array([])y=np.array([])plt.cla()for i in u:#对不同的u,设置不同的初始条件xt=np.arange(1/m,1+1/m,1/m)#得到经过n次迭代的结果for j in range(t):xt=xt*i*(1-xt)#横坐标为当前的u,m个x=np.append(x,np.ones((m,))*i)#纵坐标为不同的初始条件得到的n次迭代的结果y=np.append(y,xt)#绘制第t次迭代后的图像plt.scatter(x,y,s=1,marker='.',label='Logistic map:$x(t+1)=\\mu x(t) (1-x(t))$')#设置横、纵坐标轴的刻度plt.xlim(0,4)plt.ylim(0,1)#设置横纵坐标轴标签plt.xlabel('$\\mu$\n不同初始条件下关于$\\mu$的函数')plt.ylabel('x(t)')plt.title('t='+str(t))#scatter()绘制散点,plot()绘制经过点的曲线#legend添加图例(放到scatter画图操作之后):展示数据的信息plt.legend()# plt.plot(x,y)plt.pause(0.01)
plt.show()

混沌与Logistic映射

庞加莱映射

为了更清楚地了解运动的形态,庞加莱对连续运动的轨迹用一个截面叫庞加莱截面将其横截,那么根据轨迹在截面上穿过的情况就可以简洁地判断运动的形态,由此所得图像叫庞加莱映像。在截面图上轨迹下一次穿过截面的点X(n+1)可以看成前一次穿过的点X(n)的一种映射:X(n+1)=f(X(n))n=0,1,2,…这个映射就叫庞加莱映射。它把一个连续的运动化为简洁的离散映射来研究,在庞加莱映射中的不动点反映了相空间的周期运动;如果运动是二倍周期的则庞加莱映射是两个不动点;四倍周期则有四个不动点等。绘制庞加莱映射是在普通的相平面上进行,它不是像画相轨道那样随时间变化连续地画出相点,而是每隔一个外激励周期T=2π/ω取一个点,例如取样的时刻可以是t=0,T,2T…,相应的相点记为P0(x0,y0) P1(x1,y1) P2(x2,y2)…,这些离散相点就构成了庞加莱映射。

参考

  • Logistic映射

Logistic映射相关推荐

  1. C#实现基于Logistic映射混沌加密算法(可加密静态图片和动态图片)

    这是本菜鸡在<信息隐藏>中实现的图像加密,选用的是logistics混沌加密算法,希望对你的课设或项目有所帮助 文章目录 基于Logistic映射混沌加密算法 逻辑斯蒂(Logistic) ...

  2. 混沌序列 java,基于Logistic映射混沌加密算法的研究_韩凤英

    第7卷第1期长沙航空职业技术学院学报 Vo1.7No .1 2007年3月 CHANGS HA AERO NAUT I CAL VOCATI ONAL AND TECHN I CAL COLLEGE ...

  3. 绘制 Logistic 映射分叉图

    逻辑斯蒂映射: xk+1=rxk(1−xk)x_{k+1} = rx_k(1-x_k) xk+1​=rxk​(1−xk​) import numpy as np import matplotlib.p ...

  4. matlab 实现常用的混沌映射(Tent, Sine, Sinusoidal, Piecewise, Logistic, Cubic, Chebyshev)

    大部分混沌映射的系数是有限制的, 针对每个模型最优的混沌系数是不一样的, 因此混沌系数要根据自己的模型来定. 下面的系数都是根据我自己的模型而设定的. 混沌映射 1 Tent 映射 2 Sine 映射 ...

  5. 混沌映射singer map 和 logistic map分叉图

    两个混沌分叉图 前提: import matplotlib.pyplot as plt import numpy as np singer map python代码 def singermap10(x ...

  6. 实现图片打乱_基于混沌Logistic加密算法的图片加密与还原

    基于混沌Logistic加密算法的图片加密与还原 摘要 一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果.为了能够体现该算法在图 ...

  7. 逻辑斯蒂(logistic)回归深入理解、阐述与实现

    第一节中说了,logistic 回归和线性回归的区别是:线性回归是根据样本X各个维度的Xi的线性叠加(线性叠加的权重系数wi就是模型的参数)来得到预测值的Y,然后最小化所有的样本预测值Y与真实值y'的 ...

  8. 基于混沌系统的文本加密算法研究(二)——经典混沌映射

    基于混沌系统的文本加密算法研究(二)--经典混沌映射 前言 一.一维Logistic混沌映射 二.二维Henon混沌映射 三.三维Lorenz连续混沌映射 总结 代码 1.Logistic映射 2.H ...

  9. 基于Logistic混沌序列和DNA编码的图像加解密算法仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 离散的Logistic映射对初值和结构参数的改变具有极端的牧感性,在一定条件下能够产生混沌,并且产生的混沌序列具有类白噪声统计 ...

最新文章

  1. linux snmp更改端口号,snmpd服务无法更改默认端口
  2. flutter制作具有自定义导航栏的渐进式 Web 应用程序
  3. 微软遭遇滑铁卢,chrome成为最受欢迎浏览器
  4. python面试刷题app_Python面试的一些心得,与Python练习题分享
  5. web安全测试视频课程专题_有关有效企业测试的视频课程
  6. [读书笔记]TCP/IP详解V1读书笔记-4 5
  7. vbreport8.wpf.viewer 个别电脑不显示_手机听歌不过瘾?一招将Win10电脑变成蓝牙音箱...
  8. 第二层交换机工作原理
  9. javascript中的cookie
  10. HDU-2037 今年暑假不AC
  11. Java程序设计基础笔记 • 【第7章 Java中的类和对象】
  12. mysql 建表语句
  13. Quartz-CronTrigger解读
  14. 拼多多数据分析笔试题(附代码答案)
  15. oracle 11g dul,学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中
  16. 将QTextEdit右键菜单设置为中文
  17. 横摆角速度的仿真模型建立
  18. 成都笔试——PL/SQL准备
  19. 成就系统实现(一)-概述
  20. cpu是微型计算机的什么,cpu是什么 看了你还敢说不知道吗【图文教程】

热门文章

  1. (11)向量组及其线性组合
  2. powerha_在IBM PowerHA集群环境中实现存储数据的服务器端缓存
  3. 安卓手机使用Termux运行java环境
  4. 写一个登录界面连接数据库,判断用户名和密码
  5. hive与Oracle数据库的相互同步
  6. 串口热拔插学习(转载)
  7. Instant NGP SIGGRAPH 2022 Best Paper
  8. java awt canvas_java.awt 类 Canvas - Java 中文参考手册
  9. 一张图解释什么是遗传算法_通俗易懂地解释遗传算法
  10. 房产中介 二手房中介小程序 一流开发 抓住小程序热潮