Logistic映射

在看论文时看到了这个概念,于是就去简单了解了一下。

参考博客

1.前言

谈到Logistic映射就要先谈一谈什么是混沌系统。百度百科上的解释是,混沌系统是指在一个确定性系统中,存在着貌似随机的不规则运动,其行为表现为不确定性、不可重复、不可预测,这就是混沌现象。混沌是非线性动力系统的固有特性,是非线性系统普遍存在的现象。

最耳熟能详的混乱现象莫过于蝴蝶效应。这是美国气象学家爱德华·洛伦兹(Edward N.Lorenz)于1963年在一篇提交纽约科学院的论文提到的一种现象。简单来说,对于一个混沌系统,如果初始条件发生了极为微小的变化,比如 x 0 : 0.5556 → 0.5555 x_0:0.5556\rightarrow0.5555 x0:0.55560.5555,那么最终得到的结果会出现极大的差异。这是因为初始时的微小误差会在一系列的计算过程中以指数形式增长,最终增长到无法忽略的地步。

Logistic映射就是这样一种比较简单的一维混沌系统。

2.Logistic映射

Logistic映射的定义存在多种形式,我遇到的一种定义形式如下所示:
x n + 1 = x n μ ( 1 − x n ) , μ ∈ [ 0 , 4 ] , x n ∈ ( 0 , 1 ) x_{n+1}=x_n\mu(1-x_n),\mu\in[0,4],x_n\in(0,1) xn+1=xnμ(1xn),μ[0,4],xn(0,1)
上式中, μ \mu μ被称为分支参数。值得一提的是,Logistic映射并不一定处于混沌状态,这与 μ \mu μ的取值有关。相关研究指出,只有当 3.5699456 < μ ≤ 4 3.5699456<\mu\leq4 3.5699456<μ4,Logistic映射才具有混沌性质。

下面我会用MATLAB图像来展示Logistic映射的一些性质。主要做两个工作:

  1. 当初始值相同时,观察 μ \mu μ对Logistic映射造成的影响;
  2. 3.5699456 < μ ≤ 4 3.5699456<\mu\leq4 3.5699456<μ4,观察不同初始值对Logistic映射造成的影响.

2.1. μ \mu μ对Logistic映射的影响

mu = [3.8,3.0,3.99];  % mu的取值
MaxCycle = 1000;
N = 3;
x = zeros(MaxCycle,N);
x(1,:) = 0.5;  %  初始值

cycle = 1;
while cycle <= MaxCycle - 1
    for i = 1:N
        % 一维logistic映射
        x(cycle + 1,i) = x(cycle,i) * mu(i) * (1 - x(cycle,i));
    end
    cycle = cycle + 1;
end
% 绘图
y = 1:MaxCycle;
scatter(y,x(:,1));
hold on
scatter(y,x(:,2));
scatter(y,x(:,3));
title("logistic映射");
xlabel("迭代次数(x0=0.5)");
ylabel("Logistic映射");
legend('mu=3.80','mu=3.00','mu=3.99');
% 可以发现,当mu越靠近4时,整幅图像呈现出一种伪随机分布的情况,与[0,1]均匀分布很像;
% 而当mu处于其它范围时,函数最终会收敛到某个值.

在这里插入图片描述

2.2.初始值对Logistic映射的影响

mu = 3.99;  % mu的取值
MaxCycle = 100;
N = 2;
x = zeros(MaxCycle,N);
x(1,:) = [0.5556,0.5555];  %  初始值

cycle = 1;
while cycle <= MaxCycle - 1
    for i = 1:N
        % 一维logistic映射
        x(cycle + 1,i) = x(cycle,i) * mu * (1 - x(cycle,i));
    end
    cycle = cycle + 1;
end
% 绘图
y = 1:MaxCycle;
scatter(y,x(:,1));
hold on
scatter(y,x(:,2));
title("logistic映射");
xlabel("迭代次数(mu=3.99)");
ylabel("Logistic映射");
legend('x0=0.5556','x0=0.5555');
% 可以发现,虽然初始值的误差只有0.0001,但整体的映射却是完全不同的

在这里插入图片描述
写到这里我突然想到,matlab或者用其它语言编写的随机函数是真随机吗?如果只是伪随机的话,那么可以实现真随机函数吗?如何实现?这个问题就留给我之后再细想吧。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐