如何避免scipysolve_ivp中初始条件的事件检测

问题描述

我正在研究神经回路的模拟。该电路由八段组成,我用微分方程求解每段的活动。微分方程为

dE[i]/dt = f(b[i] * E[i]) (i = 0,1,... 7)

和 b[i] 在 E[i] 从下到上削减阈值时发生变化。为了实现这一点,我使用 Scipy solve_ivp 构建了以下代码

seg_number = 8
t0 = 0
tend = 2e5
x0 = [0]*seg_number

def gen_event(i):    
    def event(t,x):
        return x[i] - threshold
    event.terminal = True
    event.direction = 1
    return event

events = [gen_event(i) for i in range(seg_number)]


def func(t,x): #differential equation
    dx = []
    for i in range(seg_number):
    ・・・
    return(dx)


while True:
    orbit = solve_ivp(func,(t0,tend),x0,events = events)
    if orbit.status == 1:
        ・・・  # update b[i]

        t0 = orbit.t[-1]
        x0 = orbit.y[:,-1].copy()

    else:
        break

然而,在这代码中,当改变b[i]和初始条件并再次求解微分方程时,初始条件被检测为一个事件,导致无限循环。如果我在初始条件中添加少量,则解决方案继续进行,但我认为这不是一个好的解决方案。

x0 = orbit.y[:,-1].copy() + 1e-12

如果你知道如何解决这个问题,请告诉我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)