AI人工智能与数学之美

Python实现Kuramoto模型的思想前提

2020-05-24  本文已影响0人  KangSmit的算法那些事儿

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

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

其他参考资料

上一篇下一篇

猜你喜欢

热点阅读