Kuramoto模型源远流长,这里不会对它做过于理论方面的讲解,只是面向动力学重构的工作中,可能要用到Kuramoto模型的相关介绍。
假设读者了解的常微分方程基本概念,图论知识,了解邻接矩阵,
通过本文,你将获得
-
单个节点的Kuramoto模型,以及其中参数的含义
-
正弦耦合的Kuramoto
-
Kuramoto模型的平均场分析 (Mean-Field),这也揭示了模型与复分析的关系
-
一般的Kuramoto网络
Kuramoto网络模型
数学表达
单个节点
参考[1],我们考虑单个节点的Kuramoto模型
d θ d t = ω (1) \frac{d \theta}{d t}=\omega \tag{1} dtdθ=ω(1)
明显这是一个线性常微分方程模型,它的解为 θ ( t ) = ω t + θ ( 0 ) \theta(t)=\omega t+\theta(0) θ(t)=ωt+θ(0),不难想象,当自然频率 ω \omega ω更大, θ \theta θ的斜率也会变化得越陡,如图1.a所示;绿色的 ω 3 \omega_3 ω3参数更高,蓝色的 ω 1 \omega_1 ω1更小
既然是振子模型,我们认为 θ + 2 π \theta+2\pi θ+2π 与 θ \theta θ 没有区别,于是我们可以用对 2 π 2\pi 2π 取mod的方式,得到图1.b的齿状周期震荡图;
既然 θ \theta θ 的变化范围从0到 2 π 2\pi 2π,从这个角度,我们可以从单位圆的角度看待振子。同样,自然频率最大的绿色振子走在了最前面。
正弦耦合
Kuramoto网络模型可以用如下的方式耦合在一起,也被称为正弦耦合(Sinusoidal Coupling)[YTB]:
d θ i d t = ω i + K N ∑ j = 1 N sin ( θ j − θ i ) i = 1 … N (2) \begin{array}{r} \frac{d \theta_i}{d t}=\omega_i+\frac{K}{N} \sum_{j=1}^N \sin \left(\theta_j-\theta_i\right) \quad i=1 \ldots N \tag{2} \end{array} dtdθi=ωi+NK∑j=1Nsin(θj−θi)i=1…N(2)
这时是全连接网络,不过可以看出一些有趣的性质。
如果 0 < θ j − θ i < π 0<\theta_j-\theta_i<\pi 0<θj−θi<π,那么 sin ( θ j − θ i ) > 0 \sin \left(\theta_j-\theta_i\right)>0 sin(θj−θi)>0。在2个节点的情况下, j j j号振子的 θ k \theta_k θk会有变大趋势,而 i i i 号振子相位有变小的趋势。(相比与他们各自的自然频率而言)
大家也能想象,当 0 < θ j − θ i < π 0<\theta_j-\theta_i<\pi 0<θj−θi<π的时候,会发生怎样的运动🤔
一些情况,会发生锁频(Frequency Locking),即:两个振子一开始会拉开距离,然后保持在一个特定的距离前行。关于锁频的详细讲解就先不说了。其实用相位差 ϕ = θ 1 − θ 1 \phi = \theta_1-\theta_1 ϕ=θ1−θ1 去做分析就行。
另一种情况是,当 ω 1 = ω 2 = . . . = ω N \omega_1=\omega_2=...=\omega_N ω1=ω2=...=ωN,且 K > 0 K>0 K>0时,这些振子会逐渐从散乱的状态收敛到完全同步的状态。这种情况可以类似的用减法来分析,比如构造向量 θ ^ i ( t ) = θ i − ω t \hat{\theta}_i(t)=\theta_i-\omega t θ^i(t)=θi−ωt。
θ ^ i ( t ) = θ i − ω t d θ ^ i d t = K N ∑ j = 1 N sin ( θ ^ j − θ ^ i ) (3) \begin{aligned} & \hat{\theta}_i(t)=\theta_i-\omega t \\ & \frac{d \hat{\theta}_i}{d t}=\frac{K}{N} \sum_{j=1}^N \sin \left(\hat{\theta}_j-\hat{\theta}_i\right) \end{aligned} \tag{3} θ^i(t)=θi−ωtdtdθ^i=NKj=1∑Nsin(θ^j−θ^i)(3)
可以看到, θ ^ i \hat{\theta}_i θ^i 的个稳定点是所有 θ ^ i \hat{\theta}_i θ^i都为0的情况。
平均场分析 (Mean-Field)
单纯出于好奇了解Kuramoto与复数的联系,但这块在后续并不会用到
根据一个复分析欧拉公式: e i θ = cos ( θ ) + i sin ( θ ) Im ( e i θ ) = sin ( θ ) \begin{aligned} & e^{\mathbf{i} \theta}=\cos (\theta)+\mathbf{i} \sin (\theta) \\ & \text{Im}\left(e^{\mathbf{i} \theta}\right)=\sin (\theta)\end{aligned} eiθ=cos(θ)+isin(θ)Im(eiθ)=sin(θ),公式(3)可表为:
KaTeX parse error: \tag works only in display equations
接下来是一个不那么容易理解的设定,为了进一步对上面的公式进行处理,我们定义一个叫做 Kumamoto Order Parameter 的东西,就是令: 1 N ∑ j = 1 N e i θ ^ j : = r e ( i ϕ ^ ) \frac{1}{N} \sum_{j=1}^N e^{\mathrm{i} \hat{\theta}_j}:=r e^{(\mathrm{i} \hat{\phi})} N1∑j=1Neiθ^j:=re(iϕ^)。(毕竟复数加复数还是一个复数,现在只是用 r r r 和 ϕ ^ \hat{\phi} ϕ^来进行刻画)。从而,公式(4)可以进一步化简为
d θ ^ i d t = Im ( r K e − i θ ^ i e i ϕ ^ ) = Im ( r K e ( i ( ϕ ^ − θ ^ i ) ) = r K sin ( ϕ ^ − θ ^ i ) \frac{d \hat{\theta}_i}{d t}=\text{Im} \left(r K e^{-i \hat{\theta}_i} e^{\mathbf{i} \hat{\phi}}\right)=\text{Im} \left(r K e^{\left(\mathrm{i}\left(\hat{\phi}-\hat{\theta}_i\right)\right.} \right)=r K \sin \left(\hat{\phi}-\hat{\theta}_i\right) dtdθ^i=Im(rKe−iθ^ieiϕ^)=Im(rKe(i(ϕ^−θ^i))=rKsin(ϕ^−θ^i)
从而,同步的速度由 r r r 和 ϕ \phi ϕ 来决定,他们看起来代表了网络的某种全局性质。
一般网络
上面都是在谈论全连接网络,这里我们给不同的 i i i 和 j j j之间赋予不同的形式,[Yan,2023]
θ ˙ i = ω i + K N ∑ j = 1 N a i j sin ( θ j − θ i ) , ( i = 1 , ⋯ , N ) , \dot{\theta}_i=\omega_i+\frac{K}{N} \sum_{j=1}^N a_{i j} \sin \left(\theta_j-\theta_i\right),(i=1, \cdots, N), θ˙i=ωi+NK∑j=1Naijsin(θj−θi),(i=1,⋯,N),
其中, θ i \theta_i θi表示第i个振子的相位, ω i \omega_i ωi表示第i个振子的自然频率。 A = a i j A=a_{ij} A=aij为邻接矩阵, a i j = 1 a_{ij}=1 aij=1第i个节点会受到第j个节点的影响(j→i)。0表示没有连接。 K N \frac{K}{N} NK表示整体的连接强度,当K很小时,所有振子都会倾向以他们的自然频率运动,当K比较大时,每个振子会受到自己邻居节点的影响。当K超级大时,所有的振子将会以一个共同的频率 ∑ i ω i / N \sum_i \omega_i / N ∑iωi/N运动。
仿真
首先,绘制单个Kuramoto的图形。因为是线性模型,每次将得到的相位保持在0到2pi的范围,如下图3所示
接下来,我们进行2个节点的绘制,这里的主要困难在于连接矩阵和累乘的定义,在matlab中的编程可能会混淆,这里这里我们设
A
=
[
a
11
a
12
a
21
a
2
n
]
A=\left[\begin{array}{ll}a_{11} & a_{12} \\ a_{21} & a_{2 n}\end{array}\right]
A=[a11a21a12a2n], theta
是表示状态变量的列向量
[
θ
1
θ
2
]
\left[\begin{array}{l}\theta_1 \\ \theta_2\end{array}\right]
[θ1θ2],于是theta'-theta
为
[
0
θ
2
−
θ
1
θ
1
−
θ
2
0
]
\left[\begin{array}{ccc}0 & \theta_2-\theta_1 \\ \theta_1-\theta_2 & 0\end{array}\right]
[0θ1−θ2θ2−θ10]。
可以验证: [ θ 1 θ 2 ] = [ ω 1 + K N ( a 11 × 0 + a 12 × ( θ 2 − θ 1 ) ) ω 2 + K N ( a 21 × ( θ 1 − θ 2 ) + a 22 × 0 ) ] d t + [ θ 1 θ 2 ] \left[\begin{array}{l}\theta_1 \\ \theta_2\end{array}\right]=\left[\begin{array}{l}\omega_1+\frac{K}{N}\left(a_{11} \times 0+a_{12} \times\left(\theta_2-\theta_1\right)\right) \\ \omega_2+\frac{K}{N}\left(a_{21} \times\left(\theta_1-\theta_2\right)+a_{22} \times 0\right)\end{array}\right] d t +\left[\begin{array}{l}\theta_1 \\ \theta_2\end{array}\right] [θ1θ2]=[ω1+NK(a11×0+a12×(θ2−θ1))ω2+NK(a21×(θ1−θ2)+a22×0)]dt+[θ1θ2]是与公式2一致的。
% 计算每个振荡器的相位变化率
dtheta = omega + (K/N) * sum(A .* sin(theta' - theta),2);
% 更新相位
theta = theta + dtheta * dt;
图4:在16左右出现了两个峰,这是从15之后,被 θ 1 − θ 2 \theta_1-\theta_2 θ1−θ2给往回拉扯导致的(可以对比黄线看出红线被拉扯的轨迹)
参考
[1] YTB Episode 1: Kuramoto Model Part 12
[2] 源码地址
[3] flowus博客