为引用自身的分段定义ODE系统编写Python代码

时间:2019-07-19 02:15:56

标签: python odeint

我想使用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]

0 个答案:

没有答案