如何为Scipy的solve_ivp例程设置方向属性?
How to set the direction attribute for Scipy's solve_ivp routine?
我想使用 Scipy 的 solve_ivp 仅存储具有正梯度的事件;也就是说,它们相对于 0 解在增加。根据文档,这似乎可以通过修改事件参数下的方向属性来跟踪。但是,我仍然不清楚如何实现它,所以我希望能有一个工作示例。
我的代码如下:
def ivp_solver(system_of_equations: callable, time_range: tuple, inital_cond: tuple, params: callable = morris_lecar_defaults(), track_event: callable = voltage_passes_threshold) -> object:```
sol = solve_ivp(system_of_equations, time_range, inital_cond, args=(params,), events= track_event, t_eval= np.linspace(time_range[0], time_range[1],time_range[2]))
return sol
这是我要跟踪的事件:
def voltage_passes_threshold(t, system_state, args):
return system_state[0] +20
将voltage_passes_threshold.direction
设置为正值。即,
def voltage_passes_threshold(t, system_state, args):
return system_state[0] + 20
voltage_passes_threshold.direction = 1
那么 sol.t_events
和 sol.y_events
中记录的事件将是 system_state[0]
增加 值 -20 的事件(即system_state[0] + 20
增加到 0).
我想使用 Scipy 的 solve_ivp 仅存储具有正梯度的事件;也就是说,它们相对于 0 解在增加。根据文档,这似乎可以通过修改事件参数下的方向属性来跟踪。但是,我仍然不清楚如何实现它,所以我希望能有一个工作示例。
我的代码如下:
def ivp_solver(system_of_equations: callable, time_range: tuple, inital_cond: tuple, params: callable = morris_lecar_defaults(), track_event: callable = voltage_passes_threshold) -> object:```
sol = solve_ivp(system_of_equations, time_range, inital_cond, args=(params,), events= track_event, t_eval= np.linspace(time_range[0], time_range[1],time_range[2]))
return sol
这是我要跟踪的事件:
def voltage_passes_threshold(t, system_state, args):
return system_state[0] +20
将voltage_passes_threshold.direction
设置为正值。即,
def voltage_passes_threshold(t, system_state, args):
return system_state[0] + 20
voltage_passes_threshold.direction = 1
那么 sol.t_events
和 sol.y_events
中记录的事件将是 system_state[0]
增加 值 -20 的事件(即system_state[0] + 20
增加到 0).