美文网首页AI人工智能与数学之美
Python实现Kuramoto模型的思想前提

Python实现Kuramoto模型的思想前提

作者: KangSmit的算法那些事儿 | 来源:发表于2020-05-24 15:00 被阅读0次

    不小小看它,以下的思想告诉我们,所有的微分方程组都可画出(这里只展示一个函数思想)
    遍历思想:

    import numpy as np
    import matplotlib.pylab as plt
    #将不同i画在一起
    x = np.linspace(-np.pi * 2, np.pi * 2, 100)  # 定义域为: -2pi 到 2pi
    plt.figure(1, dpi=50)  # 创建图表1
    
    for i in range(1, 5):  # 画四条线
      for j in range(1, 5):
          plt.plot(x, np.sin(x / i+x/(2*j)))
    
    plt.show()
    

    执行结果:


    image.png

    问题描述:
    Kuramoto model是一种用来描述同步数学模型,由日本物理学家藏本由纪(Kuramoto Yoshiki)首先提出[1][2]。具体说来,它描述了大量耦合振子的同步行为[3][4]。这个模型原本是为了描述化学振子、生物振子而构建,后发现具有广泛的应用,例如神经振荡[5][6][7],以及振荡火焰的动力学[8][9]。惊人的是,一些物理系统的行为也符合这个模型,比如耦合约瑟夫森结的阵列[10]

    这个模型假设,所有振子都是完全相同的或几乎完全相同的,相互之间的耦合很弱、并且任意两个振子之间的相互作用强度取决于它们相位差的正弦。

    image.png

    那么如何实现?

    先来看看一个简单的微分方程组:python数值解
    以求解洛伦兹曲线为例,以下方程组代表曲线在xyz三个方向上的速度,给定一个初始点,可以画出相应的洛伦兹曲线。

    image.png

    代码与图如下:

    import numpy as np
    from scipy.integrate import odeint
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    
    def dmove(Point, t, sets):
        """
        point:present location index
        sets:super parameters
        """
        p, r, b = sets
        x, y, z = Point
        return np.array([p * (y - x), x * (r - z), x * y - b * z])
    
    
    t = np.arange(0, 30, 0.001)
    P1 = odeint(dmove, (0., 1., 0.), t, args=([10., 28., 3.],))  #
    ## (0.,1.,0.) is the initial point; args is the set for super parameters
    P2 = odeint(dmove, (0., 1.01, 0.), t, args=([10., 28., 3.],))
    ## slightly change the initial point from y = 1.0 to be y = 1.01
    
    fig = plt.figure()
    ax = Axes3D(fig)
    ax.plot(P1[:, 0], P1[:, 1], P1[:, 2])
    ax.plot(P2[:, 0], P2[:, 1], P2[:, 2])
    plt.show()
    
    

    执行结果:


    image.png

    其他参考资料

    相关文章

      网友评论

        本文标题:Python实现Kuramoto模型的思想前提

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