控制Scipy的ODEINT中的输出限制

时间:2016-02-03 22:38:44

标签: python python-3.x scipy differential-equations odeint

我有以下简化的伪代码设置,它涉及一个ODE系统,我试图用scipy的odeint来解决。

y

根据我提供的输入,我可能导致无意义的结果 - 或崩溃。我已经把问题缩小到def diff_func(y, time, parms): if y[1] <= 0.1: y[1] = 0.1 输入偶尔消极,因为其中一个是温度 - 它会导致各种各样的问题。它首先出现负面的原因尚不清楚,可能是一个稳定性问题。

我试图更改diff功能以包括如下的检查:

touchesMoved

这似乎工作正常,我还在测试它。但是,我想询问:这是否会导致问题,如果有更好的方法强制odeint只允许正输出(即,如果发现负数则改变步长)。

谢谢!

1 个答案:

答案 0 :(得分:0)

请先查看我最近发布的other answer

您想要做的是为您的ODE添加饱和度约束。有几种可能性来实现这种行为,但我建议这样做:

# calculate dy[1]
y1 = y[1]
if dy[1] < 0 and y1 <= 0.1 # or 0.0, depends on accuracy you wish to maintain
    y1 = 0
    dy1 = 0 # this prevents your variable from going further down
else
    # normal routine

请告诉我,如果它适合您。

最好的问候。