【发布时间】:2019-10-30 01:06:18
【问题描述】:
我正在尝试实现一个处理非负 ODE 系统的 R 算法。我需要 MATLAB 中的 ode45 之类的东西来定义必须为非负数的状态。
我在 3 年前就讨论过这个问题,但没有真正的解决方案。 deSolve 仍然不是要走的路。我发现了一些看起来很有前途的 Python 代码。也许这在 R 中也是可能的。最后我必须定义一个函数包装器,作为python中的functools。它的作用非常简单。这是python包装器的代码:
def wrap(f):
@wraps(f)
def wrapper(t, y, *args, **kwargs):
low = y < 0
y = np.maximum(y, np.ones(np.shape(y))*0)
result = f(t, y, *args, **kwargs)
result[too_low] = np.maximum(result[low], np.ones(low.sum())*0)
return result
return wrapper
return wrap
我的意思是在 python 中这是直截了当的。包装器将在由
调用的集成的每个步骤中使用solver = scipy.integrate.odeint(f, y0)
solution = solver.solve()
在 R 中是否也有可能?我知道还有一个 functools 包和 functools 函数。但我不知道这是否真的有效。我可以为此使用 deSolve 中的事件吗?
我现在在这个项目上工作了 5 年,但我没有想法。我使用了 MATLAB、C++ 和 Python 接口,但这一切都很慢,我在 R 中需要它。非常感谢您的帮助!
【问题讨论】:
-
我没有看到minimal reproducible example。如果这个“被讨论过”,那么你应该提供一个链接。使用 Python 的外部包之一在 Python 中提供代码不会对 R 程序员提供特别丰富的信息。同样没有信息的是说 deSolve “不起作用”。
-
您在求解稳态解吗?
stode和来自deSolve的steady.1D有positive = TRUE以确保解决方案是积极的。此外,ode45被实现为deSolve中的一个方法。如果您给我们提供了一个 R 示例,但它没有给出您想要的结果,那将会很有帮助,这样我们就可以修复它以获得您想要的结果。
标签: python r matlab ode functools