美文网首页Python建模与NLP程序员工具癖
Python数学建模极简入门之(四)动力系统的蝴蝶效应

Python数学建模极简入门之(四)动力系统的蝴蝶效应

作者: dalalaa | 来源:发表于2016-11-22 21:24 被阅读534次

    这一期我们回到与第二期中的例子有点相似的模型:
    看过我上一期给大家提供的ppt的简友们应该知道,这次我们将要讲的动力系统说这样的:
    xn+1 = a xn (1 - xn)
    对于这个动力系统有这样的规律:

    当 0<a<1时,由于0≤ xn+1 ≤axn
    当1<a<3时,任何(0,1)中初始值的轨道趋于一个平衡点x = 1 - 1/a;
    当3<a<1+√6 时,xn会围绕两个数振动,它们满足x = f2(x),且 x≠f(x);
    当1+√6<a<3.5440903506...时,从任意点出发的轨道将逐渐沿着四个数值振动,它们满足 x = f4(x),称为周期四点。
    当a 继续增大,又会出现周期八点,周期16点,稳定当极限值为3.569945557391...,当a介于极限值与4之间时,系统将进入混沌区域,系统将会表现出对初始数值当强烈敏感性,对于不同的初始值,即使它们离的非常近,它们当轨道也终将以某种方式分离,这也就是所谓的蝴蝶效应了。

    Logistic 映射

    import matplotlib.pyplot as plt
    def drawCurve(a,CurrentLevel):#a即前文中的系数a,CurrentLevel即Xn
        RegentLevel = []
        for i in range(30):
            RegentLevel.append(CurrentLevel)
            CurrentLevel = (a*CurrentLevel-a*(CurrentLevel**2) )
        Time = [i for i in range(30)]
        plt.plot(Time, RegentLevel)
    for i in range(1,100):
        drawCurve(1.5,i/100)
    plt.annotate('a = 1.5',xy = (5, 0.4),xytext = (6,0.9),arrowprops = dict(facecolor = 'black',shrink = 0.1))
    
    a = 1.5 a= 2.5 a=3 a= 3.4 a=3.5 a=3.8

    这样也能看到平衡点个数的变化,但是看不明显,如果使用plt.scatter()函数来绘制散点图的话,结果更加明显。

    散点图看起来比折线图好一些:

    a=1.5 a=2.5 a=3 a=3.5 a=3.8

    这样有几个平衡点就看的比较明显了。

    那么我们再用频率分布图来看看:

    import matplotlib.pyplot as plt
    def drawCurve(a,CurrentLevel):
        RegentLevel = []
        for i in range(30):
            RegentLevel.append(CurrentLevel)
            CurrentLevel = (a*CurrentLevel-a*(CurrentLevel**2) )
        Time = [i for i in range(30)]
        plt.hist(RegentLevel,bins = 100)
    for i in range(1,100):
        drawCurve(1.5,i/100)
    plt.annotate('a = 1.5',xy = ( 0.15,5),xytext = (0.25,6),arrowprops = dict(facecolor = 'black',shrink = 0.1))
    
    a=1.5 a=2.5 a=3.5 a=3.8

    这样看的话,确实跟唐云教授的ppt里面讲的一致。

    这篇文章只是借动力系统的蝴蝶效应展示了一下matplotlib库的一些作用,对于不同的模型我们应该使用不同的图表使数据得到更好的展示。

    有兴趣转行机器学习的朋友可以加群:


    机器学习-菜鸡互啄群

    相关文章

      网友评论

      • 790d4a753537:您好
        为何我运行了你的代码后图像是一条直线呢?
      • 游丶:楼主可以把代码贴一下吗~~
        dalalaa:@dalalaa 代码已经修改好了~
        dalalaa:@游丶 你是说计算部分的代码吗,我下班回家找找

      本文标题:Python数学建模极简入门之(四)动力系统的蝴蝶效应

      本文链接:https://www.haomeiwen.com/subject/tfofpttx.html