我有以下微分方程组:
对于变量 和参数。
我想在 python 中解决这个问题,这很容易使用odeint.
def f(y, t, params):
weaponsC1, weaponsC2 = y
a, b, c, d, e1, e2 = params
t_0 = 10
t_1 = 11
derivs = [a*x- c*y + e1,
b*y - d*x + e2]
return derivs
#solve
psoln = odeint(f, y0, t, args=(params,), rtol=1e-10)
这将返回您所期望的:
为了
和初始条件:,上面的代码返回:
现在我想添加一个强制函数以便我可以在某个时间以某个恒定量扰动 ODE。在与更简洁的方法进行了一番斗争之后,我决定这样做:
def f(y, t, params):
weaponsC1, weaponsC2 = y
a, b, c, d, e1, e2 = params
t_0 = 10
t_1 = 11
derivs = [a*weaponsC1- c*weaponsC2 + e1, + (2*(t > t_0)*(t < t_0+0.5)) + (5*(t > t_1)*(t < t_1+0.5)),
b*weaponsC2 - d*weaponsC1 + e2 + (2*(t > t_0)*(t < t_0+0.5))+ (5*(t > t_1)*(t < t_1+0.5))]
return derivs
仅显示了强制函数的图表,考虑了不同的时间值:
def g(t_0):
return((2*(t > t_0)*(t < t_0+0.5)))
plt.plot(t,(g(3) + g(4)))
当我用这个强制函数绘制 ODE 时,它适用于任何非平衡的初始条件:
但是,当我将平衡设置为起始条件时,尽我所能,我永远无法影响 ODE:
这是与上述工作解决方案相同的代码;唯一的变化是起始条件。
我知道 ODEint 假设 diffeq 是可微的,而我的不是——这可能是问题的原因吗?或者这是 ODE 某些属性的结果?



