python - JiTCDDE 集成问题
问题描述
我正在尝试用一些参数求解一个二维延迟微分方程。问题是我无法获得正确的解决方案(我知道)并且我怀疑它来自集成步骤,但我不确定并且我不太了解 JiTCDDE 的工作原理。
这是 DDE:
这是我的模型:
def model(p, q, r, alpha, T, tau, tmax, ci):
f = [1/T * (p*y(0)+alpha*y(1, t-tau)), 1/T * (r*y(0)+q*y(1))]
DDE = jitcdde(f)
DDE.constant_past(ci)
DDE.step_on_discontinuities()
data = []
for time in np.arange(DDE.t, DDE.t+tmax, 0.09):
data.append( DDE.integrate(time)[1])
return data
我只对 y(1) 解决方案感兴趣
和参数:
T=32 #escala temporal
p=-2.4/T
q=-1.12/T
r=1.5/T
alpha=.6/T
tau=T*2.4 #delay
tmax=400
ci = np.array([4080, 0])
这是我对该模型和参数的绘图:
这是(蓝线)正确的解决方案(有人给我情节而不是数据)
解决方案
以下代码适用于我并产生类似于您的控件的结果:
import numpy as np
from jitcdde import y,t,jitcdde
T = 1
p = -2.4/T
q = -1.12/T
r = 1.5/T
alpha = .6/T
tau = T*2.4
tmax = 10
ci = np.array([4080, 0])
f = [
1/T * (p*y(0)+alpha*y(1, t-tau)),
1/T * (r*y(0)+q*y(1))
]
DDE = jitcdde(f)
DDE.constant_past(ci)
DDE.adjust_diff()
times = np.linspace( DDE.t, DDE.t+tmax, 1000 )
values = [DDE.integrate(time)[1] for time in times]
from matplotlib.pyplot import subplots
fig,axes = subplots()
axes.plot(times,values)
fig.show()
请注意以下事项:
我设置
T=1
(并tmax
相应调整)。我认为这里仍然存在错误。我用
adjust_diff
而不是step_on_discontinuities
. 您的模型的问题在于它在t = 0 处的导数存在严重的不连续性。(不连续是正常的,但不是这种情况)。这会在积分一开始就导致自适应步长控制出现问题。这种不连续性表明您的模型或您最初的过去有问题。如果您只关心长期行为,后者并不重要,但这里似乎并非如此。我在文档中添加了有关此类问题的段落。
推荐阅读
- reactjs - 错误运行命令:构建脚本返回非零退出代码:1
- sympy - 用 SymPy 对两个泊松分布求和
- git - 如何调试 git 功能“替代”
- angular - NGX Uploader 上传进度跃升至 100%
- python - 用户使用 tweepy 过滤 Twitter 流
- java - 运行 JVM 的远程机器需要发布 Git Commit Hash,使用 Gradle 完成部署。非安卓
- avro - 如何为具有 30MB+ 数据的大型平面文件生成单个 .avro 文件
- c++ - 具有奇怪重复模板模式的派生类中的损坏成员变量
- r - 如何更改 R 中 heatmap.2 函数的聚类算法?
- html - 有些样式不适用于 CSS,所以我必须在 HTML 中添加它们