Python系统仿真其一:logistics递归方程


前言

混沌是系统在微小的外界扰动下产生的无序的非线性动态。在基础理论的学习中,一个参数已经确定的系统在给定条件下会得到确定的解,求出系统的解后就可以确定系统过去、现在以及未来的状态,因此,求解系统等同于进行预测系统状态。随着KAM定理等理论的出现,研究系统不再局限于光滑的、确定的解,而是开始考虑混沌解,尤其是在天气播报、地震预测等描述长期行为的系统。

一、逻辑斯蒂映射(logistic map)

logistics映射的形式很简单,系统的下一个状态 x ( n + 1 ) x(n+1) x(n+1)的状态由当前状态 x ( n ) x(n) x(n)得出,形式如下: x n + 1 = μ   x n ( 1 − x n ) x_{n+1}=\mu\ x_n(1-x_n) xn+1=μ xn(1xn)用于描述三种因素对系统的影响,分别是驱动因素 μ x n \mu x_n μxn、耗散因素 − μ x n 2 -\mu x_n^2 μxn2和非线性因素 x n 2 x_n^2 xn2,其中 μ \mu μ是系统控制参量。这样一个确定形式的映射,在 μ \mu μ的不同取值下有常数解、周期解和混沌解,出现了倍周期分岔。

二、Python仿真

首先考虑最简单的仿真固定参数的结果,考虑 μ = 2.9 \mu=2.9 μ=2.9,输出它的波形图。

def plot1():
    x = 0.2 # 初值
    mu = 2.9
    y = np.array([])
    for i in range(25):
        x = mu * x * (1 - x)
        y = np.append(y, x)
    xp = np.array(signal.argrelextrema(y, np.greater)) 
    xn = np.array(signal.argrelextrema(-y, np.greater))
    plt.scatter(xp,y[xp], c='black')
    plt.scatter(xn,y[xn], c='black')
    plt.plot(y)

主要使用matplotlib库画图,用scipy.signal寻找极大值,加粗显示比较美观。

在这个暴力迭代的基础上,生成一个numpy数组表示 μ \mu μ,即可以绘制分岔图。实际上每一位即是1,因此无需做过多处理。

mu = np.arange(2.9, 3.7, 0.0001)
x = 0.2  # 初值
front = 1000  # 舍去单周期前面一段,如上图
iters = 100  # 最后画出结果的迭代次数
for i in range(front+iters):
    x = mu * x * (1 - x)
    if i >= front:
        plt.plot(mu, x, ',k')

最终输出这样的结果。
完整的logistics映射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捡到野生的惠惠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值