【问题标题】:Python - Using odeint with an integral in the ODEPython - 在 ODE 中使用带积分的 odeint
【发布时间】:2019-02-04 22:10:06
【问题描述】:

我正在使用以下形式的 ODE:

a*dv/dt + (b+k1)*v + c*integral_0->t_(vdt) = k1*v1 + k2*integral_0->t_(v1dt)

我正在尝试实现 odeint 以获得该系统的解决方案,但我不确定如何使用 ODE 中的积分来实现。 v1 是一个已知输入,因此不需要考虑右侧的积分。

【问题讨论】:

  • 我想你可以再次为 t 推导出这个方程,并求解二阶 ode
  • 这是对您的方程式的正确解释吗? quicklatex.com/cache3/ae/… 如果是这样,你可以考虑在你的帖子中加入这张图片。

标签: python scipy ode differential-equations integral


【解决方案1】:

x 设置为v 的积分,这样x'=vx''=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

【讨论】:

  • 那么 odeint 调用会是什么样子?我不确定如何为其设置 y 输入。如何定义 x 和 v?抱歉,这是我第一次使用 odeint,我发现文档不是很清楚。
猜你喜欢
  • 2020-06-05
  • 2018-02-23
  • 2016-01-19
  • 2014-05-15
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多