python - 使用 odeint 求解带有阶跃函数参数的 ODE 集

标签 python scipy ode differential-equations

我正在尝试使用 Python 中的 odeint 对以下系统进行数值求解:enter image description here :

我的问题是 k1 取决于 p 的值。当p<=0.01 k1=0否则k1=5 .

我不确定如何编写具有上述约束的系统。我可以从:

def sys(x,t,flip):
S,T,p = x

dx = [1-T-k1*T,
     0.1*(1-S)-k1*S,
     -0.2*(1-T-k1*T)+0.1*(1-S)-k1*S]
return dx

在哪里flip可以是 0.01值,但我不确定如何为这种情况实现 if 语句,因为我需要集成过程来检查 p 的值每次迭代后。

最佳答案

为了在积分后重建k1p的值,把这个计算放到一个额外的函数中

def kp(T,S):
    p = -0.2*T + S
    k1lo, k1hi = 0, 5
    flip = -0.01
    k1 = 0.5*(k1lo+k1hi + (k1hi-k1lo)*np.tanh((p-flip)/1e-8))
    return k1,p

然后在 ODE 导数函数中调用它

def ode(t, TS):
    T, S = TS
    k1,_ = kp(T,S)
    dTdt = 1 - T - k1*T
    dSdt = 0.1*(1 - S) - k1*S
    return dTdt, dSdt

然后在集成之后沿着解码件绘制

T,S = sol.y;
k,p = k1(T,S);

使用每个评论修正的阈值 flip=-0.01 确实获得了振荡行为。

plot of solution and decision variables

关于python - 使用 odeint 求解带有阶跃函数参数的 ODE 集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261779/

相关文章:

python - 使用 Python 求解非线性微分一阶方程

r - 如何在 deSolve (R) 中实现系统动力学风格的管道延迟?

python - python 中分布的正态性检验

python - 立即绘制和 Matplotlib

python - 如何使用 jinja2 将模板中的名称复数化?

python成员str性能太慢

python - `scipy.misc.comb` 比临时二项式计算快吗?

python - 集成 ODE 后打印数组中的特定值

julia - 如何访问 Julia 中神经 ODE 的训练参数?

python - 具有特定颜色和图例位置的 Pandas 条形图?