我想使用odeint
用Python编写解决ODE系统的代码。我不确定如何编写代码,同时还要在条件中引用派生本身,因为if语句将在派生定义之前出现。
附带的图像是我的系统。 x仅在负数上定义,而y在正数上定义: Image of dx/dt Image of dy/dt (我对此链接表示歉意,我还无法嵌入图片)
在条件中,xdot与dx / dt相同,但用点符号表示,以简化表达。 M(t)是一些很好的连续正弦函数。
我尝试定义 dx / dt =(A + Bx)+ M(t) 然后使if语句指定条件 如果x == 0或dy_dt> 0,但这并不是我想要的,因为我对x设置了域限制,因此仅当x <0时才定义dx / dt。 (*)
相关:也许我可以做我在(*)中所做的事情,并通过指定范围来限制要解决ODE的域。如果有人可以建议如何做,我将不胜感激。
def odesystem(state, t):
x = state[0]
y = state[1]
d_x = (A+B*x) + M(t)
d_y = (A+B*y) + M(t)
if x == 0 or d_y > 0 :
d_x = 0
elif y == 0 or d_x < 0:
d_y = 0
return [d_x, d_y]
# Set parameters and initial condition
x_0 = -1
y_0 = 1
v0 = [x0, y0]
t = np.linspace(0,10000,100000)
# solve the system
soln = odeint(odesystem, v0, t)
x = soln[:,0]
y = soln[:,1]