混沌系统源于迭代,某些迭代函数会导致混沌现象的产生,迭代是一个确定的系统,但是也会产生仿佛随机系统一样的现象。例如人口模型常用的Logistic方程。
$$x_{t+1} = \alpha \times x_t (1-x_t) $$
$$在迭代参数 \alpha 取不同值的时候会产生不同得迭代结果,可能收敛于确定值,也可能产生混沌线性。$$
以Python程序来进行测试
$$其中 alpha \in (0, 4) , x \in (0, 1)$$
import numpy as np import matplotlib.pyplot as plt # \sigma \in (0, 4) # x0 \in (0, 1) 无影响 def logistic_function(x, sigma): return sigma*x*(1-x) def getSeries(x0, sigma, length): res = np.zeros(length) res[0] = x0 for i in range(1, len(res)): res[i] = logistic_function(res[i-1], sigma) return res def showPlot(): length = 20 # fig = plt.figure(figsize=(9, 9)) # # 布局, 间隔 # fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.02, wspace=0.02) for i in range(25): # ax = fig.add_subplot(5, 5, i + 1, xticks=[], yticks=[]) # ax.scatter(range(length), getSeries(0.1 + 0.2*int(i/5), 0.3+0.5*int(i % 5), length), color="blue") # ax.text(2, 2, "x0=%.2f, sigma=%.2f" % (0.1+0.2*int(i/5), 0.3+0.5*int(i % 5))) plt.scatter(range(length), getSeries(0.1+0.2*int(i/5), 0.3+0.5*int(i % 5), length), color="blue") plt.title("x0=%.2f, sigma=%.2f" % (0.1+0.2*int(i/5), 0.3+0.5*int(i % 5))) plt.savefig("chaosImgs2/x0=%.2f, sigma=%.2f.png" % (0.1+0.2*int(i/5), 0.3+0.5*int(i % 5)), dpi=300, format='png') # plt.show() if __name__ == '__main__': showPlot()
程序画出不同迭代参数和不同初始值的25张图,并保存本地,结果如下(注释部分是画5行5列的图)
$$结果可见, \sigma 越大越趋于混沌 $$