julia - 为什么 Julia (DifferentialEquations.jl) JumpProblem 在以后停止跳跃?
问题描述
我正在尝试使用来自 DifferentialEquations.jl 的工具来实现离散随机模拟。它在早期的时间点上效果很好,但后来却莫名其妙地没有任何跳跃。
using DifferentialEquations
using Plots
#initial conditions
far1_ic = 0
cln_ic = 100
ste12_ic = 1000
far1cln_ic = 0
u0 = [far1_ic, cln_ic, ste12_ic, far1cln_ic]
#paramaters
#Far1
ks_F = 10 #1
kd_F = 0.01 #2
kd_F_C = 0.01 #3
kA_C = 200 #4
ks_F_S = 200 #5
#Cln
ks_C = 10 #6
kd_C = 0.1 #7
kA_F = 500 #8
ks_C_C = 100 #9
#Ste12
ks_S_alpha = 80 #10
ks_S = 1 #11
ks_S_S = 100 #12
kd_S = 0.01 #13
kA_S = 500 #14
kd_S_F = 0.005 #15
#Far1Cln
ks_FC = 100 #16
kd_FC = 0.05 #17
krev_FC = 600 #18
#misc
alpha = 17 #19
power_alpha = 1 #20
alpha_halfmax = 50 #21
p = [ks_F, kd_F, kd_F_C, kA_C, ks_F_S, ks_C, kd_C, kA_F, ks_C_C,
ks_S_alpha, ks_S, ks_S_S, kd_S, kA_S, kd_S_F, ks_FC, kd_FC,
krev_FC, alpha, power_alpha, alpha_halfmax];
s_far1(u,p,t) = (p[5] * ((u[3]^2)/(u[3]^2+p[14]^2)) + p[1]) * (p[19]^p[20]/(p[19]^p[20]+p[21]^p[20]))
d_far1(u,p,t) = p[2]*u[1] + p[3]*u[1]*u[2]
s_cln(u,p,t) = p[6] + p[9]*((u[2]^2)/(u[2]^2+p[4]^2))
d_cln(u,p,t) = p[7]*u[2]
s_ste12(u,p,t) = p[11]+(p[10]+p[12]*(u[3]^2/(u[3]^2+p[14]^2)))*(p[19]^p[20]/(p[19]^p[20]+p[21]^p[20]))
d_ste12(u,p,t) = p[13]*u[3] + p[15]*u[1]*u[3]
s_far1cln(u,p,t) = p[16]*u[1]*u[2]
d_far1cln(u,p,t) = p[17]*u[4]
r_far1cln(u,p,t) = p[18]*u[4]
function syn_f(integrator)
integrator.u[1] += 1
end
function deg_f(integrator)
integrator.u[1] -= 1
end
function syn_c(integrator)
integrator.u[2] += 1
end
function deg_c(integrator)
integrator.u[2] -= 1
end
function syn_s(integrator)
integrator.u[3] += 1
end
function deg_s(integrator)
integrator.u[3] -= 1
end
function syn_fc(integrator)
integrator.u[4] += 1
integrator.u[1] -= 1
integrator.u[2] -= 1
end
function deg_fc(integrator)
integrator.u[4] -= 1
end
function rev_fc(integrator)
integrator.u[4] -= 1
integrator.u[1] += 1
integrator.u[2] += 1
end
jump1 = ConstantRateJump(s_far1, syn_f)
jump2 = ConstantRateJump(d_far1, deg_f)
jump3 = ConstantRateJump(s_cln, syn_c)
jump4 = ConstantRateJump(d_cln, deg_c)
jump5 = ConstantRateJump(s_ste12, syn_s)
jump6 = ConstantRateJump(d_ste12, deg_s)
jump7 = ConstantRateJump(s_far1cln, syn_fc)
jump8 = ConstantRateJump(d_far1cln, deg_fc)
jump9 = ConstantRateJump(r_far1cln, rev_fc)
p[19] = 27 # reset parameter alpha
tspan = (0.0,600.0) #time span
prob = DiscreteProblem(u0,tspan,p) # variables must be discrete. Provide IC, span, paramaters.
jump_prob = JumpProblem(prob,DirectFW(),jump1,jump2,jump3,jump4,jump5,jump6,jump7,jump8,jump9,save_positions=(false,false))
sol = solve(jump_prob,SSAStepper(),saveat=1);
我尝试保存所有位置,而不是仅保存每个整数。我尝试使用 Direct 而不是 DirectFW。我尝试使用默认而不是 SSAStepper。我检查了 ODESolution 对象,它确实只是在稍后的每个时间步重复相同的值;这不仅仅是情节。
非常感谢任何建议!
解决方案
这是一个已修复的错误。运行]up
,您的代码将起作用。
推荐阅读
- c# - ItemSource 的 WPF ComboBox 事件已更改
- php - 仅通过引用为 $model 和 $modelproduct 分配的变量
- postgresql - 我应该迁移到 Redshift 吗?
- c - 函数调用中的花括号在 C 中是什么意思?
- oracle - 发现 Oracle 数据库上的表返回一个空列表
- c++ - 使用模板从不同 cin 的用户获取值
- kotlin - UninitializedPropertyAccessException 使用匕首 2
- javascript - 从 MongoDB 中重复文档集合中的唯一文档中获取值的总和
- asp.net-core-2.0 - Autofac拦截器不适用于某些类
- python - 如何在不影响 DataFrame 中的数值数据的情况下对分类数据进行编码?