You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JiTCDDE模拟时滞Kuramoto模型:get_state()提取导数维度异常问题

时滞Kuramoto模型JiTCDDE模拟中导数提取异常的原因与解决方法

问题原因

你误解了get_state()的作用:这个方法返回的是JiTCDDE积分器内部维护的历史状态节点集合,而非当前时刻的单一状态。这些节点是积分器为了计算时滞项(t-τ时刻的相位)而保留的不同过去时刻的状态数据,每个节点包含对应时刻的时间、相位向量、导数向量。

初始阶段积分器需要逐步积累覆盖最大时滞τ的历史数据,所以节点数量会不断减少并最终稳定——当历史数据足够覆盖所有时滞需求后,积分器只会保留插值所需的最少节点,因此你看到输出形状从(21,50)逐步收敛到(3,50)。

解决方法

要获取当前时刻的n个相速度(导数),不需要使用get_state(),直接调用积分器的compute_derivatives()方法即可。修改你的循环代码如下:

p = [] # 相位
dp = [] # 相速度

for time in I.t + np.arange(0, 100.1, 0.1):
    current_phase = I.integrate(time) % (2 * np.pi)
    p.append(list(current_phase))
    
    # 获取当前时刻的导数向量
    current_derivs = I.compute_derivatives(I.t, I.y)
    dp.append(list(current_derivs))

这样每个时间步都会得到一个长度为n的导数列表,完全符合你的预期。

补充说明

  • I.integrate(time)会将积分器推进到目标时刻,此时I.t对应当前时间,I.y对应当前的相位向量。
  • compute_derivatives(t, y)会根据你定义的模型,计算在时间t、状态y下的导数向量,结果维度与状态向量一致(即n个元素)。

内容的提问来源于stack exchange,提问作者Snoobooks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:04:59