目录
Logistic映射
Xn+1=Xn×μ×(1-Xn) μ∈[0,4] X∈[0,1]
当μ趋近于4时,迭代的结果可以看作是随机分布(实际上每个x值都是由映射确定的,也就是说是伪随机)。
目的
动手实践深入理解Logistic混沌变量,了解x的分布与μ的关系。
Python代码
# -*- codeing = utf-8 -*-
# @Time : 2021/4/15 16:35
# @Author : 师伟
# @File : chaoticvar.py
# @Software : PyCharm
import matplotlib.pyplot as plt
import numpy as np
x = np.zeros(shape=(400, 300)) # 定义一个400*300的数组存放x迭代产生的数,400是由于u从0增加到4,增加幅度为0.01,有400个μ,300表示在每个μ下迭代300次产生的300个x值
u = -0.01
for i in range(0, 399):
u += 0.01
x[i, 0] = 0.5 # 定义x0为0.5
for j in range(0, 299):
x[i, j + 1] = x[i, j] * u * (1 - x[i, j])
Xaxes = np.zeros(shape=(400, 300)) # 由于每个μ对应300个x,所以画散点图就需要让x轴是重复的,因为scatter函数是一个x轴对应一个y轴,所以每个u重复300次就可以把所有的300个x值都对应到该μ上
for i in range(0, 299):
u1 = -0.01
for j in range(0, 399):
u1 += 0.01
Xaxes[j, i] = u1
Yaxes = np.zeros(shape=(400, 300)) # y轴就是产生的400*300个x的值
for i in range(0, 399):
for j in range(0, 299):
Yaxes[i, j] = x[i, j]
plt.scatter(Xaxes, Yaxes)
plt.show()
难点
产生数据之后怎么将一个u对应300个x的情况画成散点图
解决办法
将同一个u重复300与300个x对应
运行结果
从图中可以看出当横坐标μ趋于4时,x趋于随机分布。