Python绘制分叉图

程序源代码

由于毕业论文要切换成非线性的缘故,需要我拿出一些时间来研究绘制各种分叉图。下面举一个例子来说明绘图的思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from tqdm import tqdm
import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure(figsize=(10,8),dpi=100)
def LogisticMap():
mu = np.arange(0, 4, 0.01)
x = 0.1 # 初值
iters = 1000 # 不进行输出的迭代次数
last = 200 # 最后画出结果的迭代次数
for i in tqdm(range(iters+last)):
x = mu * x * (1 - x)
if i >= iters:
plt.plot(mu, x, alpha=0.5) #
plt.ylim(0, 1)
plt.xlim(0, 4)
plt.title(r' $x_{n+1} = \mu x_{n} (1-x_{n}).$ n = '+ str(i+1) )
plt.ylabel('x-Random number')
plt.xlabel('r-Rate')
plt.show()
LogisticMap()

绘图分析

  1. 绘图的叠代公式 \[\begin{equation}\label{eq:diedai} x_{n+1}=\mu x_n(1-x_n) \qquad 0\leq \mu\leq 4, 0<x<1 \end{equation}\]

  2. 将参数\(\mu\)\(0\)\(4\)均分成\(100\)份,然后将其作为自变量,遍历区间取值。

  3. 对于任意一个\(\mu\)值,选择初值 \(x_0=0.1\), 使用式\(\eqref{eq:diedai}\)叠代\(1000\)次, 但是这些叠代值并不输出, 然后输出\(1001\)次到\(1200\)次的叠代结果。 其原理为:如果参数\(\mu\)在某个值时,无数次叠代后它会收敛到某个值附近,那这样的点就是一个嘛吸引点。但是,有的点以无数次叠代后仍然不收敛,所以在固定一个较大的次数\(1000\)后,再叠代\(100\)次, 将这\(100\)次的结果输出,就能判断这\(100\)个点的分布情况。