我有以下简化的伪代码设置,它涉及一个ODE系统,我试图用scipy的odeint来解决。
y
根据我提供的输入,我可能导致无意义的结果 - 或崩溃。我已经把问题缩小到def diff_func(y, time, parms):
if y[1] <= 0.1:
y[1] = 0.1
输入偶尔消极,因为其中一个是温度 - 它会导致各种各样的问题。它首先出现负面的原因尚不清楚,可能是一个稳定性问题。
我试图更改diff功能以包括如下的检查:
touchesMoved
这似乎工作正常,我还在测试它。但是,我想询问:这是否会导致问题,如果有更好的方法强制odeint只允许正输出(即,如果发现负数则改变步长)。
谢谢!
答案 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
请告诉我,如果它适合您。
最好的问候。