不小小看它,以下的思想告诉我们,所有的微分方程组都可画出(这里只展示一个函数思想)
遍历思想:
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三个方向上的速度,给定一个初始点,可以画出相应的洛伦兹曲线。
代码与图如下:
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
网友评论