一旦状态变量重新达到阈值,就使lsoda终止

时间:2016-12-25 10:34:14

标签: r differential-equations

作为玩具示例,请考虑微分方程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有一个选项,看起来有可能实现类似的东西。

1 个答案:

答案 0 :(得分:1)

在lsoda的deSolve文档中,您还可以找到rootfunc参数,该参数可用于在根位置触发事件。

请参阅https://www.rdocumentation.org/packages/deSolve/versions/1.10-9/topics/events中的示例3,以获取与您的测试用例非常接近的示例。