python - Hindmarsh-Rose 模型的相空间轨迹

标签 python matplotlib plot numerical-methods integrator

我正在尝试绘制 Hindmarsh-Rose 模型的相空间轨迹。我已经实现了 RK4 积分器来求解以下方程组:

enter image description here

下面给出了我到目前为止编写的代码。

import numpy as np
import matplotlib.pyplot as plt

def RK4(f, x0, t):
    
    dt   = t[2] -t[1]  #time span 
    N    = len(t)
    X    = np.empty((len(t), len(x0)))
    X[0] = x0
    
    for i in range(1, N):
        
        k1 = f(X[i-1], t[i-1])
        k2 = f(X[i-1] + dt/2*k1, t[i-1] + dt/2)
        k3 = f(X[i-1] + dt/2*k2, t[i-1] + dt/2)
        k4 = f(X[i-1] + dt*k3, t[i-1] + dt)
        
        X[i] = X[i-1] + dt/6*(k1 + 2*k2 + 2*k3 + k4)
        
    return X


def hindmarsh(X, t):
    
    a  = 3.0
    c  = 1.0
    d  = 5.0
    s  = 4.0
    x0 = - 1.6
    
    # Bifurcation parameters
    
    b   = 3.09
    I   = 3.2
    eps = 0.001
      
    x,y,z = X
    
    dxdt  = y - (a * x**3) + (b * x**2) + I - z 
    dydt  = c - (d * x**2) - y 
    dzdt  = eps * ( (s * (x - x0)) - z) 
    
    return np.array([dxdt, dydt, dzdt])


T     = np.linspace(0,100,10000)

Y     = [0.03, 0.03, 3]

param = RK4( hindmarsh, Y, T )

ax = plt.axes(projection='3d')

zline = param[2]
yline = param[1]
xline = param[0]


ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

ax.plot3D(xline, yline, zline)

但是,我并没有在相空间中得到如下图所示的轨道,而是得到一条穿过相空间的直线。我将不胜感激有关如何获取下面的图的任何提示。

enter image description here

最佳答案

param 的形状为 (len(T), len(Y)),因此时间位于第一个维度,x、y、z 位于第二个维度方面。您将得到正确的绘图

zline = param[:,0]
xline = param[:,1]
yline = param[:,2]

关于python - Hindmarsh-Rose 模型的相空间轨迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67806064/

相关文章:

r - 强制 ggsave 对 .wmf 文件中的点 geom 进行矢量化

python - 如何在多个终端上运行一个命令?

python - 在 python 中运行 bash 命令并处理错误

python - backend_qt5.py "' figure' 是一个未知的关键字参数,在 matplotlib

python - 如何绘制 seaborn 中的前 5 个值

python - Matplotlib 散点图,其中每个 x 的 y 值数组

Matlab 投币模拟

python - 对列进行排序,使一列位于另一列的值之后

python - 将元类添加到库类

C 语言中计算高效的区间/密度搜索