2016-12-25 3 views
0

В качестве примера игрушек, рассмотрит дифференциальное уравнение, дй/дт = р хМарки lsoda прекращается, как только переменная состояния reacjes порогового значение

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

В документации desolve для lsoda вы также можете найти параметр rootfunc, который может использоваться для запуска события в корневых местоположениях.

См. Пример 3 в https://www.rdocumentation.org/packages/deSolve/versions/1.10-9/topics/events для примера, который кажется очень близким к вашему тестовому образцу.

Смежные вопросы