【问题标题】:python scipy integrate - changing parameter that is dependent on state spacepython scipy集成 - 改变依赖于状态空间的参数
【发布时间】:2017-04-17 20:51:34
【问题描述】:

我正在开展一个项目,该项目需要找到具有 6 个状态变量的 ODE 系统的轨迹。问题是某些参数取决于状态空间。系统本身并不重要,但如果您有兴趣,请参阅Adams et al 2004 中的图 2.1。我了解如何按时间改变参数,但我不确定如何使其成为状态空间本身的函数

这是我正在寻找的一个示例(a 是时间的函数)

from scipy import integrate
import numpy as np

t = np.linspace(1, 10,  0.5)
X0 = [0.1]
def func(X,t)
    a = 0.5 * t
    return [a * b * X[0]**2]

X, infodict = integrate.odeint(func, X0, t, full_output=True, mxstep=5000000) 

如何让参数b成为状态空间的函数,比如b = 1/X[0]?

【问题讨论】:

  • 我不明白这个问题。为什么不直接实现func()中的功能呢?也就是说,添加行b = 1/X[0](或任何你需要计算“参数”的表达式),然后在你的公式中使用b
  • 我想我不完全确定集成是如何工作的。每次调用 func 时,X 是状态空间当前值的数组吗?如果是这样,我可以照你说的做。
  • 是的,它就是这样工作的。

标签: python scipy ode


【解决方案1】:

在 cmets 的帮助下,我刚刚将参数实现为状态空间的函数。如下:

from scipy import integrate
import numpy as np

t = np.linspace(1, 10,  0.5)
X0 = [0.1]
def func(X,t)
    a = 0.5 * t
    b = 1/X[0]
    return [a * b * X[0]**2]

X, infodict = integrate.odeint(func, X0, t, full_output=True, mxstep=5000000) 

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 2023-01-26
    • 1970-01-01
    • 2012-08-11
    • 2021-08-04
    • 1970-01-01
    • 2019-04-30
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多