Python - 在 ODE 中使用带有积分的 odeint
Python - Using odeint with an integral in the ODE
我正在使用以下形式的 ODE:
a*dv/dt + (b+k1)*v + c*integral_0->t_(vdt) = k1*v1 + k2*integral_0->t_(v1dt)
我正在尝试实现 odeint 以获得该系统的解决方案,但我不确定如何使用 ODE 中的积分来实现。 v1 是已知输入,因此右侧的积分不是问题。
设x
为v
的积分,则x'=v
、x''=v'
,同理x1
对v1
,则你的方程读作二阶微分方程
a*x''+(b+k1)*x'+c*x=k1*v1+k2*x1
给定 v1
作为输入,状态向量需要包含三个综合变量 x, v, x1
,这给出了 ODE 函数
def odesys(y,t):
x, v, x1 = y
v1 = eval_v1(t)
return [ v, (k1*v1+k2*x1 - (b+k1)*v-c*x )/a, v1 ]
要将它与 odeint 一起使用,您可以执行
t = np.linspace(0,T,2001); # define the end time T before
y0 = [ 0, 0, 0 ] # standard convention is that everything is zero for negative times
y = odeint(odesys, y0, t) # add arguments for higher accuracy if needed
x, v, x1 = y.T # transpose of a list of tuples is a tuple of lists
plt.plot(t,x); plt.show() # as example that should work
我正在使用以下形式的 ODE:
a*dv/dt + (b+k1)*v + c*integral_0->t_(vdt) = k1*v1 + k2*integral_0->t_(v1dt)
我正在尝试实现 odeint 以获得该系统的解决方案,但我不确定如何使用 ODE 中的积分来实现。 v1 是已知输入,因此右侧的积分不是问题。
设x
为v
的积分,则x'=v
、x''=v'
,同理x1
对v1
,则你的方程读作二阶微分方程
a*x''+(b+k1)*x'+c*x=k1*v1+k2*x1
给定 v1
作为输入,状态向量需要包含三个综合变量 x, v, x1
,这给出了 ODE 函数
def odesys(y,t):
x, v, x1 = y
v1 = eval_v1(t)
return [ v, (k1*v1+k2*x1 - (b+k1)*v-c*x )/a, v1 ]
要将它与 odeint 一起使用,您可以执行
t = np.linspace(0,T,2001); # define the end time T before
y0 = [ 0, 0, 0 ] # standard convention is that everything is zero for negative times
y = odeint(odesys, y0, t) # add arguments for higher accuracy if needed
x, v, x1 = y.T # transpose of a list of tuples is a tuple of lists
plt.plot(t,x); plt.show() # as example that should work