【发布时间】:2017-08-24 02:04:14
【问题描述】:
我正在对一些 ODE 进行数值积分,例如
y'(t) = f(y(t), t)
这很容易使用例如 scipy 的integrate.ode 完成。函数f是使用标准Python定义的,例如:
def f(y, t, k):
return -k*y**3
我的理解是,这意味着integrate.ode 使用的fortran/C 实现必须一直对Python 进行回调,这可能会很慢。 我的问题是有没有办法避免这种情况?
最好我正在寻找一个可以让我在我的 Python 代码中内联 C-sn-p 的包,例如:
double f(double y, double t, double k) {
return -k*pow(y,3);
}
是否有任何适用于 Python 的 ODE 集成器库允许这样做?
我知道有像scipy.weave 这样的包可用于在Python 中内联C 代码,但我看不到与Integrate.ode 交互的简单方法。在所有情况下,我认为接口都必须通过 Python 函数调用。
这样的内联 C 代码存在于其他库中,例如 fenics,其中 Expression 允许 jit 编译的 C 代码。
【问题讨论】:
-
我认为你很幸运 - scipy 0.19 中的 recent changes 让你将编译后的 Cython 函数传递给
scipy.ode。我自己并没有真正使用过它,所以不能轻易提供一个有用的工作示例......