We can use the mosaic package to do integration.

First run install.packages("mosaic") on your systems. You may need to do it 2x as it errored on a few systems last time.

You can test if it worked by doing:

library(mosaic)

and seeing if you get any errors

Now, say we have a simple logistic growth differential equation:

$$\frac{dx}{dt} = {r}{x}(1 - {x}/{K})$$

we can use the function integrateODE in the mosaic package to get the solution which we can then use for plotting/computation/etc. We need to give it the initial state for all the parameters and the duration (tdur) or range of time for the resultant function:

soln = integrateODE( dx ~ r * x * (1 - x/K), x=1, K=10, r=0.5,
tdur = list(from=0, to=20))

the pretty math formulas are easy to map into R syntax.

Now we can evaluate the function for individual or ranges of time:

print(soln$x(0)) ## [1] 1 print(soln$x(1))
## [1] 1.548281
print(soln$x(3)) ## [1] 3.324279 print(soln$x(0:20))
##  [1] 1.000000 1.548281 2.319693 3.324279 4.508531 5.751209 6.905679
##  [8] 7.863017 8.584864 9.091066 9.428256 9.645239 9.781781 9.866497
## [15] 9.918599 9.950469 9.969899 9.981721 9.988905 9.993268 9.995916

and, we can plot it, too.

plotFun(soln$x(t)~t, tlim=range(0, 20)) and we can compare solutions as well. Here, we modify K a couple times: soln2 = integrateODE( dx ~ r * x * (1 - x/K), x=1, K=20, r=0.5, tdur = list(from=0, to=20)) soln3 = integrateODE( dx ~ r * x * (1 - x/K), x=1, K=5, r=0.5, tdur = list(from=0, to=20)) plotFun(soln$x(t)~t, tlim=range(0, 20))

plotFun(soln2$x(t)~t, tlim=range(0, 20), add=TRUE, col="red") plotFun(soln3$x(t)~t, tlim=range(0, 20), add=TRUE, col="green")