PWLCM分段线性混沌映射
混沌映射是生成混沌序列的一种方法,常见的混沌映射方式有 Logistic映射、Tent映射、Lorenz映射,而PWLCM(Piecewise Linear Chaotic Map,分段线性混沌映射)作为混沌映射的典型代表,数学形式简单,具有遍历性和随机性。其公式定义描述如下:
x
(
t
+
1
)
=
{
x
(
t
)
p
,
p
≤
x
(
t
)
<
p
x
(
t
)
−
p
0.5
−
p
,
p
≤
x
(
t
)
<
0.5
1
−
p
−
x
(
t
)
0.5
−
p
,
0.5
≤
x
(
t
)
<
1
−
p
1
−
x
(
t
)
p
,
1
−
p
≤
x
(
t
)
<
1
\begin{equation} x(t+1)=\left\{ \begin{array}{lr} \frac{x(t)}{p}, p \le x(t) \lt p \\ \frac{x(t)-p}{0.5-p}, p \le x(t) \lt 0.5 \\ \frac{1-p-x(t)}{0.5-p}, 0.5 \le x(t) \lt 1-p \\ \frac{1-x(t)}{p}, 1-p \le x(t) \lt 1 \end{array} \right . \end{equation}
x(t+1)=⎩
⎨
⎧px(t),p≤x(t)<p0.5−px(t)−p,p≤x(t)<0.50.5−p1−p−x(t),0.5≤x(t)<1−pp1−x(t),1−p≤x(t)<1
其中, p是该映射的控制参数,
p
∈
[
0
,
1
]
p \in [0,1]
p∈[0,1] ; x(t) 为产生的随机迭代值,
x
(
t
)
∈
[
0
,
1
]
x(t) \in [0,1]
x(t)∈[0,1] 。
下图是PWLCM混沌系统产生的伪随机序列的分布图,从图中可以看出PWLCM混沌映射产生的伪随机序列非常均匀。
python代码
import sys
import matplotlib.pyplot as plt
import cv2
import numpy as np
def pwlcm(x0, p, T):
x = np.array([])
y = np.array([])
for i in range(T):
if x0 >= 0 and x0 < p:
x0 = x0 / p
elif x0 >= p and x0 < 0.5:
x0 = (x0 - p) / (0.5 - p)
elif x0 >= 0.5 and x0 < 1 - p:
x0 = (1 - p - x0) / (0.5 - p)
elif x0 >= (1 - p) and x0 < 1:
x0 = (1 - x0) / p
x = np.append(x, i)
y = np.append(y, x0)
return x, y
def main():
# 设置迭代次数
T = 10000
p = 0.3456789012
x0 = 0.1234567890
x, y = pwlcm(x0, p, T)
# 绘制图像
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文乱码
plt.scatter(x, y, s=10, marker='.')
plt.xlabel("t", fontdict={'fontsize': 20})
plt.ylabel("x(t)", fontdict={'fontsize': 20})
plt.rcParams.update({'font.size': 20})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.show()
if __name__ == '__main__':
main()