我有以下简化的伪代码设置,它涉及一个ODE系统,我试图用scipy的odeint来解决它 .
from scipy.integrate import odeint
def diff_func(y, time, parms):
# Do stuff with parms that depends upon y and t.
new_parms = other_funcs(y,time, parms)
# Now calculate derivatives
dy1_dt = dy1_func(y, new_parms)
dy2_dt = dy2_func(y, new_parms)
# Setup up initial conditions
y_0 = [y_1_0, y_2_0]
time = np.linspace(0, 1000, 1000)
parms = list_o_constants
# Solve diffeq
yout, info = odeint(diff_func, y_0, time, args=(parms,), full_output=True)
根据我提供的输入,我可以导致无意义的结果 - 或崩溃 . 我已经把问题缩小到 y
输入偶尔会消极,因为其中一个是温度 - 它会导致各种各样的问题 . 它首先出现负面的原因尚不清楚,可能是一个稳定性问题 .
我试图改变diff函数以包括如下检查:
def diff_func(y, time, parms):
if y[1] <= 0.1:
y[1] = 0.1
这似乎工作正常,我还在测试它 . 但是,我想询问:这是否会导致问题,如果有更好的方法强制odeint只允许正输出(即,如果发现负数则改变步长) .
谢谢!
1 回答
请先看看我最近发布的other answer .
您想要做的是为ODE添加饱和度约束 . 有几种可能性来实现这种行为,但我建议这样做:
如果它适合你,请告诉我 .
最好的祝福 .