在中间时间手动在scipy.solve_ivp中设置一个值

时间:2018-10-26 03:43:09

标签: scipy ode

我正在模拟化学反应。这涉及到简单的ODE系统,我可以使用scipy.solve_ivp对其进行求解,如下所示(此处,我将种y [0]以固定的速率转换为y [1])。

import matplotlib as plt
import scipy as sp
import numpy as np

def fun(t, y): 
    return [-0.1 * y[0], +0.1 * y[0]]
#return array with the ODEs of levels of state variable 0, 1...

t_span = [0, 100]
y0 = [5, 0] # initial values
nb_of_steps = 100
t_eval = np.arange(t_span[0], 
                   t_span[1], 
                   (t_span[1]-t_span[0])/nb_of_steps)

ode_solve = sp.integrate.solve_ivp(fun, 
                                   t_span,
                                   y0,
                                   method='RK45',
                                   t_eval=t_eval,
                                   dense_output=False,
                                   events=None,
                                   vectorized=False)

plt.plot(ode_solve.t,ode_solve.y[0, :]);
plt.plot(ode_solve.t,ode_solve.y[1, :]);
plt.show()

我想在预定义的时间为某些物种手动设置新值。例如,在此示例中,我希望在时间t = 5处添加更多的起始分子,以了解系统如何演化。或者,甚至更好的是,为所有t值定义变量的值(我的输入是例如周期性刺激)吗?

0 个答案:

没有答案