0

我正在积分以下微分方程

在此处输入图像描述

使用 JiTCDDE 使用此代码:

def model(p, q, r, alpha, T, tau, tmax, ci, step):
    f = [(p*y(0)+alpha*y(1, t-tau)), (r*y(0)+q*y(1))]
        
    DDE = jitcdde(f)


    DDE.constant_past(ci)

    DDE.adjust_diff()

     
    data = []
    for time in np.arange(DDE.t, DDE.t+tmax, step):
        data.append( DDE.integrate(time)[1])
    return data

并使用此参数

T=3        #escala temporal
p=-2.4/T
q=-1.12/T
r=1.5/T
alpha=.4/T
tau=T*2.4     #delay
tmax=30
step = 1
ci = np.array([1300, 0])

我的麻烦是,当我绘制通过

data = model(p, q, r, alpha, T, tau, tmax, ci, step)

我最多得到一个非常不平滑的配置文件,如下所示:

在此处输入图像描述

当我将集成步骤更改为 0.1 时,我得到了这个

在此处输入图像描述

但那个情节去 300 而不是 30 这是我想要的

问题是:有什么方法可以将方程积分到 t=30 ,但像 t=300 一样平滑?我可以通过仅更改参数来做到这一点吗?

4

1 回答 1

1

问题是它model不会返回采样时间 ( np.arange(DDE.t, DDE.t+tmax, step)),但您只是假设它们在绘图时等距且间隔为 1。一旦您更改step0.1.

所以,你必须做的是这样的:

def model(…):
    …
    data = []
    times = np.arange(DDE.t, DDE.t+tmax, step)
    for time in times:
        data.append( DDE.integrate(time)[1])
    return times, data

然后(假设您使用 Matplotlib 绘图):

times,data = model(…)
axes.plot(times,data)
于 2020-12-24T12:24:33.350 回答