作为玩具示例,请考虑微分方程dx / dt = p x
ODE = function(t, X, p){ list( p*X ) }
可以使用包lsoda
中的deSolve
毫无问题地解决此问题。
times = seq(0, 20, by=.1)
out = lsoda( y = 1, times, ODE, p = 2 )
但是,我希望lsoda
在达到阈值后停止计算,例如xMax = 1e5
。我好像没有在文档中找到这个选项。 events
有一个选项,看起来有可能实现类似的东西。
答案 0 :(得分:1)
在lsoda的deSolve文档中,您还可以找到rootfunc
参数,该参数可用于在根位置触发事件。
请参阅https://www.rdocumentation.org/packages/deSolve/versions/1.10-9/topics/events中的示例3,以获取与您的测试用例非常接近的示例。