Python蛛网图可视化函数迭代

136 篇文章 16 订阅

🎯参阅:Julia和Python蛛网图轨道图庞加莱截面曲面确定性非线性系统

对于函数 f 和起始点 x,您可以照常绘制 (x, f(x))。 然后,由于 f(x) 将是 x 的下一个值,因此您可以通过绘制从 (x, f(x)) 到 (f(x), f(x)) 的水平线将其转换为 x。 换句话说,通过移动到水平线与线 y = x 相交的位置,可以将先前的 y 值转换为 x 值。 然后从新的 x 上升到应用于新 x 的 f。 下面的 Python 代码使这一切变得明确。

   import matplotlib.pyplot as plt
    from scipy import cos, linspace
    
    def cobweb(f, x0, N, a=0, b=1):

        t = linspace(a, b, N)
        plt.plot(t, f(t), 'k')
        plt.plot(t, t, "k:")
        x, y = x0, f(x0)
        for _ in range(N):
            fy = f(y)        
            plt.plot([x, y], [y,  y], 'b', linewidth=1)
            plt.plot([y, y], [y, fy], 'b', linewidth=1)
            x, y = y, fy
            
        plt.axes().set_aspect(1) 
        plt.show()
        plt.close()
    cobweb(cos, 1, 20)
cobweb plot for iterating cosine

生成从 x = 1 开始的 20 次余弦迭代的蛛网图。有一个固定点,蛛网图螺旋进入该固定点。接下来让我们看看不同 r 值时逻辑映射 f(x) = rx(1 – x) 的几次迭代。

    cobweb(lambda x: 2.9*x*(1-x), 0.1, 100)
    cobweb(lambda x: 3.1*x*(1-x), 0.1, 100)
    cobweb(lambda x: 3.1*x*(1-x), 0.558, 100)
    cobweb(lambda x: 4.0*x*(1-x), 0.1, 100)

如果 r ≤ 3,Logistic 映射也有一个稳定不动点。在下图中,r = 2.9。

cobweb plot for logistic map, r = 2.9

接下来我们设置 r = 3.1。我们从 x = 0.1 开始并收敛到两个吸引点。

cobweb plot for logistic map, r = 3.1

如果我们正好从其中一个吸引点开始,蛛网图就只是一个正方形。

cobweb plot for logistic map, r = 3.1, starting on attractor point

最后,当我们设置 r = 4 时,我们就处于混沌区域。

cobweb plot for logistic map, r = 4

参阅:亚图跨际

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值